Menyelesaikan Masalah Ralat SQL Semasa Memasukkan Berbilang Rekod
Dalam usaha pembangunan baru-baru ini, coretan kod direka untuk memasukkan berbilang rekod ke dalam pangkalan data menggunakan Pernyataan yang disediakan PDO mengalami ralat:
SQLSTATE[HY093]: Invalid parameter number: parameter was not defined
Walaupun nampaknya kesetaraan dalam bilangan nilai yang akan dimasukkan (count($matches)) dan bilangan ruang letak (count($values)), pelaksanaan pertanyaan gagal.
Punca Punca
Ralat berpunca daripada salah tanggapan tentang permulaan tatasusunan $values. Tidak seperti $matches, yang pada mulanya mengandungi tatasusunan kosong, $values telah diisi dengan nilai yang tidak dimulakan. Akibatnya, $values mengandungi kiraan yang lebih besar daripada $padanan, yang membawa kepada ralat ketidakpadanan parameter.
Penyelesaian
Untuk menyelesaikan isu ini, adalah penting untuk secara eksplisit mulakan $values sebagai tatasusunan kosong sebelum memasuki gelung:
$matches = array('1'); $count = count($matches); $values = []; for($i = 0; $i < $count; ++$i) { $values[] = '(?)'; }
Dengan pengubahsuaian ini, kiraan $matches dan $values akan sepadan, membenarkan pertanyaan untuk dilaksanakan dengan jayanya.
Pertimbangan Tambahan
Selain itu, adalah dinasihatkan untuk memastikan lajur cincang dalam sasaran jadual mempunyai indeks unik untuk mengendalikan konflik kunci pendua. Ini boleh dicapai dengan menambah baris berikut selepas pernyataan INSERT:
ON DUPLICATE KEY UPDATE hash=values(hash)
Atas ialah kandungan terperinci Mengapa Penyata Disediakan PDO Saya Gagal dengan 'SQLSTATE[HY093]: Nombor parameter tidak sah' Apabila Memasukkan Berbilang Rekod?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!