Bagaimana untuk menangani masalah mysqli? Sebagai contoh, ralat berlaku dalam mysqli_fetch_array(): Parameter #1 mestilah jenis mysqli_result.
P粉426906369
P粉426906369 2023-07-24 16:47:03
0
1
487
<p>Dalam persekitaran tempatan/pembangunan saya, pertanyaan MySQLi berjalan dengan baik. Walau bagaimanapun, apabila saya memuat naiknya ke persekitaran pengehosan web saya, saya mendapat ralat berikut: </p> <blockquote> <p>Ralat maut: Panggilan ke fungsi ahli bind_param() pada bukan objek dalam...</p> </blockquote> <p>Ini ialah kod: </p> <pre class="brush:php;toolbar:false;">global $mysqli; $stmt = $mysqli->prepare("SELECT id, description FROM tbl_page_answer_category WHERE cur_own_id = ?"); $stmt->bind_param('i', $cur_id); $stmt->execute(); $stmt->bind_result($uid, $desc);</pre> <p>Untuk menyemak pertanyaan saya, saya cuba melaksanakan pertanyaan melalui phpMyAdmin dalam panel kawalan dan hasilnya adalah normal. </p>
P粉426906369
P粉426906369

membalas semua(1)
P粉252116587

Pendek kata

  1. Sentiasa gunakan mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT) dalam kod sambungan mysqli anda dan sentiasa semak ralat PHP.
  2. Sentiasa gantikan setiap pembolehubah PHP dalam pertanyaan SQL anda dengan tanda soal dan gunakan pernyataan yang disediakan untuk melaksanakan pertanyaan. Ini membantu mengelakkan pelbagai ralat sintaks.

Penjelasan

Kadangkala kod mysqli anda akan menjana ralat, seperti mysqli_fetch_assoc() menjangkakan parameter 1 ialah mysqli_result tetapi sebenarnya mendapat boolean..., memanggil fungsi ahli bind_param()... atau ralat serupa. Tidak ada sebarang ralat tetapi pertanyaan masih tidak berfungsi. Ini bermakna pertanyaan anda gagal dilaksanakan.

Setiap kali pertanyaan gagal, MySQL akan mempunyai mesej ralat yang menerangkan sebabnya. Dalam versi PHP yang lebih lama, mesej ralat ini tidak dihantar kepada PHP dan anda hanya akan mendapat mesej ralat yang tidak jelas yang disebutkan di atas. Oleh itu, adalah sangat penting untuk mengkonfigurasi PHP dan mysqli untuk melaporkan ralat MySQL kepada anda. Sebaik sahaja anda mendapat mesej ralat, anda boleh membetulkan ralat tersebut.

Bagaimana untuk mendapatkan mesej ralat dalam MySQL

Pertama, dalam semua persekitaran, sentiasa tambah baris kod berikut sebelum sambungan mysqli:

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

Selepas ini, semua ralat MySQL akan ditukar kepada pengecualian PHP. Pengecualian yang tidak ditangkap akan menyebabkan ralat maut PHP. Jadi jika ralat MySQL berlaku, anda akan menerima ralat PHP biasa. Ini akan segera memberitahu anda tentang punca ralat. Dan jejak tindanan akan membawa anda ke lokasi yang tepat di mana ralat berlaku.

Bagaimana untuk mendapatkan maklumat ralat daripada PHP

Pada pelayan pembangunan, pastikan mesej ralat dipaparkan pada skrin, dan pada pelayan pengeluaran, semak log ralat. Lihat artikel saya tentang pelaporan ralat PHP untuk mendapatkan butiran.

Sila ambil perhatian bahawa apabila membuat panggilan AJAX, buka alat pembangun (F12) pada pelayan pembangunan dan tukar ke tab rangkaian. Kemudian buat permintaan yang anda ingin lihat hasilnya dan ia akan muncul dalam tab Rangkaian. Klik padanya dan tukar ke tab Respons. Anda akan melihat output yang tepat di sana. Pada pelayan pengeluaran, semak log ralat.


Cara menangani mesej ralat yang anda terima

Pertama, anda perlu mencari pertanyaan masalah. Mesej ralat mengandungi nama fail dan nombor baris tempat ralat itu berlaku. Untuk kod ringkas, ini sudah memadai, tetapi jika kod anda menggunakan fungsi atau kelas, anda mungkin perlu menjejak tindanan untuk mencari pertanyaan masalah.

Selepas mendapat mesej ralat, anda perlu membaca dan memahaminya. Ini mungkin kedengaran terlalu jelas, tetapi pelajar sering mengabaikan fakta bahawa mesej ralat bukan sekadar tanda amaran, ia sebenarnya mengandungi penjelasan terperinci tentang masalah tersebut. Anda hanya perlu membaca mesej ralat dan menyelesaikan masalah.

  • Jika mesej ralat mengatakan bahawa jadual tidak wujud, anda perlu menyemak ejaan, kesilapan menaip dan penggunaan huruf besar. Selain itu, anda perlu memastikan bahawa skrip PHP anda disambungkan ke pangkalan data yang betul.
  • Jika mesej ralat menunjukkan ralat sintaks SQL, maka anda perlu menyemak pernyataan SQL anda. Masalahnya hendaklah sebelum bahagian pertanyaan yang dirujuk dalam mesej ralat.

Jika anda tidak memahami mesej ralat, cuba cari di Google. Apabila menyemak imbas hasil, pilih jawapan yang menerangkan ralat dan bukannya terus memberikan penyelesaian. Penyelesaian mungkin tidak berfungsi dalam situasi khusus anda, tetapi penjelasan akan membantu anda memahami masalah dan membolehkan anda menyelesaikannya sendiri.

Anda juga perlu mempercayai maklumat yang salah. Jika mesej ralat mengatakan bilangan token tidak sepadan dengan bilangan pembolehubah mengikat, itu sahaja. Begitu juga dengan jadual atau lajur yang hilang. Apabila memilih, sama ada kesalahan anda sendiri atau kesilapan maklumat yang salah, sentiasa berpegang pada yang pertama. Sekali lagi, ini mungkin terdengar sombong, tetapi beratus-ratus soalan di laman web ini membuktikan betapa berguna nasihat ini.

Penyahpepijatan asas

Jika pertanyaan anda nampaknya tidak berkesan, mungkin terdapat empat sebab:

  1. Ralat berlaku semasa pelaksanaan. Sudah dijelaskan di atas.
  2. Disebabkan ralat logik program, SQL tidak berjalan sama sekali. Tambahkan output nyahpepijat sementara untuk memastikan kod mencapai titik di mana pertanyaan dilaksanakan.
  3. SQL telah berjaya dilaksanakan, tetapi hasilnya dilihat dalam pangkalan data yang salah. Sila semak semula.
  4. Data yang dimasukkan tidak sepadan dengan pangkalan data. Berikut adalah beberapa cadangan untuk menyemaknya
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan