Bilangan Pembolehubah Ikatan Tidak Padan dalam Sisipan Penyata Disediakan
Apabila melaksanakan pernyataan INSERT menggunakan pernyataan yang disediakan MySQLi, pengguna mungkin menghadapi ralat: " Bilangan pembolehubah ikatan tidak sepadan dengan bilangan medan dalam pernyataan yang disediakan."
Isu ini timbul apabila bilangan pembolehubah ikatan yang disediakan dalam kaedah bind_param() tidak sejajar dengan bilangan ruang letak dalam pertanyaan INSERT . Contohnya, pertimbangkan coretan kod di bawah:
if($stmt = $conn->prepare("INSERT INTO login(user, pass) VALUES(?, ?)")) { /* Bind parameters s - string, b - blob, i - int, etc */ $stmt->bind_param("ss", $user, $pw); /* Execute it */ $stmt->execute(); /* Bind results */ $stmt->bind_result($user, $pw); /* Close statement */ $stmt->close(); $userId = $conn->insert_id; }
Dalam kod ini, pernyataan INSERT mempunyai dua ruang letak (?): satu untuk pengguna dan satu untuk pas. Walau bagaimanapun, kaedah bind_param() mengikat dua pembolehubah ($pengguna, $pw) kepada ruang letak. Ini mengakibatkan ralat tidak padan.
Penyelesaian adalah untuk mengalih keluar panggilan kaedah bind_result() memandangkan pernyataan INSERT tidak mengembalikan sebarang hasil. Kod yang dikemas kini di bawah memasukkan data ke dalam jadual dengan betul:
if($stmt = $conn->prepare("INSERT INTO login(user, pass) VALUES(?, ?)")) { /* Bind parameters s - string, b - blob, i - int, etc */ $stmt->bind_param("ss", $user, $pw); /* Execute it */ $stmt->execute(); /* Close statement */ $stmt->close(); $userId = $conn->insert_id; }
Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat \'Bilangan Pembolehubah Ikatan Tidak Padan\' dalam Penyata Disediakan MySQLi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!