Misteri Pembolehubah Ikatan Tidak Padan
Persoalannya berkisar tentang ralat yang dihadapi semasa mengikat parameter untuk pernyataan yang disediakan MySQL yang luas. Isunya terletak pada ketidakpadanan antara bilangan penunjuk jenis "s" dalam kaedah bind_param dan bilangan tanda soal (?) dalam rentetan pertanyaan.
Memahami bind_param()
bind_param() ialah kaedah mysqli yang menggantikan tanda soal (?) dalam pertanyaan yang disediakan dengan sebenar data. Setiap aksara dalam rentetan definisi jenis (cth., "s" untuk rentetan) sepadan dengan tanda soal dan data yang akan diikat.
Memastikan Bilangan Pembolehubah Ikatan
Perkara kritikal yang perlu diingat ialah bilangan aksara dalam rentetan definisi jenis (cth., "s,s,s") mesti sepadan dengan bilangan tanda soal dengan tepat (?) dalam rentetan pertanyaan. Sebagai contoh, pertanyaan dengan 3 tanda soal memerlukan rentetan definisi jenis dengan 3 aksara "s".
Memeriksa Kod
Dalam kod PHP yang diberikan, pertanyaan rentetan mengandungi 65 tanda soal, tetapi kaedah bind_param() menggunakan "s,s,s,s,s,s,s,s" (sejumlah hanya 8 aksara "s"). Percanggahan ini membawa kepada mesej ralat: "Bilangan elemen dalam rentetan definisi jenis tidak sepadan dengan bilangan pembolehubah ikatan."
Untuk Menyelesaikan Isu:
Kepada betulkan isu, sahkan bahawa bilangan aksara "s" dalam kaedah bind_param() sepadan dengan bilangan tanda soal (?) dalam pertanyaan rentetan. Dalam kes ini, kaedah bind_param() hendaklah digantikan dengan:
$stmt->bind_param("sssssssssssssssssssssssssssssssssssssssssssssssssssssssssss", ...);
Nota Tambahan:
Atas ialah kandungan terperinci Mengapa Pernyataan Disediakan MySQL Saya Gagal dengan Ralat \'Bilangan elemen dalam rentetan definisi jenis tidak sepadan dengan bilangan pembolehubah ikatan\'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!