Rumah >pembangunan bahagian belakang >tutorial php >Mengapa Pertanyaan INSERT SQL Berbilang Saya Gagal dengan 'SQLSTATE[HY093]: Nombor parameter tidak sah'?

Mengapa Pertanyaan INSERT SQL Berbilang Saya Gagal dengan 'SQLSTATE[HY093]: Nombor parameter tidak sah'?

Barbara Streisand
Barbara Streisandasal
2024-12-06 10:13:12469semak imbas

Why Does My Multiple SQL INSERT Query Fail with

Ralat Tidak Dijangka dalam Pertanyaan Sisip Berbilang

Coretan kod cuba menyediakan dan melaksanakan pertanyaan SQL untuk memasukkan berbilang nilai ke dalam jadual. Walau bagaimanapun, pelaksanaan gagal dengan ralat "SQLSTATE[HY093]: Nombor parameter tidak sah: parameter tidak ditakrifkan."

Punca Ralat

Ralat berlaku kerana bilangan elemen dalam tatasusunan $values ​​tidak sepadan dengan bilangan elemen dalam tatasusunan $matches. Pertanyaan SQL menjangkakan bilangan parameter tertentu, tetapi kod PHP menyediakan nombor yang berbeza.

Penyelesaian

Untuk menyelesaikan ralat, pastikan $values ​​dan $ tatasusunan padanan mengandungi bilangan elemen yang sama. Ini boleh dicapai dengan memulakan tatasusunan $values ​​sebelum gelung.

Selain itu, disyorkan untuk menyemak sama ada lajur cincang mempunyai indeks yang unik. Jika tidak, klausa ON DUPLICATE KEY UPDATE mungkin tidak berfungsi seperti yang diharapkan.

Kod Disemak

$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);

Atas ialah kandungan terperinci Mengapa Pertanyaan INSERT SQL Berbilang Saya Gagal dengan 'SQLSTATE[HY093]: Nombor parameter tidak sah'?. 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