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
Lepaskan: 2024-12-13 00:06:16
asal
371 orang telah melayarinya

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
Salin selepas log masuk

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[] = '(?)';
}
Salin selepas log masuk

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)
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan