Rumah >pangkalan data >tutorial mysql >Mengapa Penyata Disediakan PDO Saya Gagal dengan 'SQLSTATE[HY093]: Nombor parameter tidak sah' Apabila Memasukkan Berbilang Rekod?

Mengapa Penyata Disediakan PDO Saya Gagal dengan 'SQLSTATE[HY093]: Nombor parameter tidak sah' Apabila Memasukkan Berbilang Rekod?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-13 00:06:16417semak imbas

Why Does My PDO Prepared Statement Fail with

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn