Rumah > pangkalan data > tutorial mysql > Mengapa Pertanyaan Sisipan Berbilang Saya Membuang Ralat 'Nombor Parameter Tidak Sah' Walaupun Kiraan Parameter Padan?

Mengapa Pertanyaan Sisipan Berbilang Saya Membuang Ralat 'Nombor Parameter Tidak Sah' Walaupun Kiraan Parameter Padan?

Barbara Streisand
Lepaskan: 2024-12-28 01:46:09
asal
166 orang telah melayarinya

Why Does My Multiple Insert Query Throw an

Pengendalian Ralat: "Nombor Parameter Tidak Sah" dalam Pertanyaan Sisipan Berbilang

Apabila cuba melakukan pertanyaan sisipan berbilang, adalah penting untuk memastikan bahawa bilangan nilai parameter sepadan dengan bilangan ruang letak dalam pertanyaan itu sendiri. Walau bagaimanapun, kod berikut menghadapi ralat "SQLSTATE[HY093]: Nombor parameter tidak sah: parameter tidak ditakrifkan," walaupun mengesahkan bahawa count($matches) dan count($values) adalah sama sejurus sebelum pertanyaan dilaksanakan.

// BUILD VALUES
$count = count($matches);
for($i = 0; $i < $count; ++$i) {
    $values[] = '(?)';
}
// INSERT INTO DATABASE
$q = $this->dbc->prepare("INSERT INTO hashes (hash) VALUES " . implode(', ', $values) . " ON DUPLICATE KEY UPDATE hash = hash");
$q->execute($matches);
Salin selepas log masuk

Percanggahan antara kod dan mesej ralat berpunca daripada kemungkinan isu dalam permulaan tatasusunan $values. Kemungkinan $values ​​sudah mengandungi beberapa data, yang membawa kepada ketidakpadanan kiraan. Untuk mengelakkan ini, adalah penting untuk sentiasa memulakan tatasusunan sebelum gelung.

Untuk menyelesaikan isu, pertimbangkan kod yang diubah suai berikut:

$matches = array('1');
$count = count($matches);
$values = [];
for($i = 0; $i < $count; ++$i) {
    $values[] = '(?)';
}

// INSERT INTO DATABASE
$sql = "INSERT INTO hashes (hash) VALUES " . implode(', ', $values) . " ON DUPLICATE KEY UPDATE hash=values(hash)";
$stmt = $dbh->prepare($sql);
$data = $stmt->execute($matches);
Salin selepas log masuk

Selain itu, untuk mengelakkan "Nombor parameter tidak sah" ralat dalam berbilang pertanyaan sisipan, pastikan lajur yang digunakan untuk kemas kini kunci pendua (dalam kes ini, cincang) mempunyai indeks unik yang ditentukan. Kegagalan berbuat demikian boleh mengakibatkan tingkah laku yang tidak dijangka dan kemungkinan ralat.

Atas ialah kandungan terperinci Mengapa Pertanyaan Sisipan Berbilang Saya Membuang Ralat 'Nombor Parameter Tidak Sah' Walaupun Kiraan Parameter Padan?. 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