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

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

Susan Sarandon
Susan Sarandonasal
2024-12-05 02:09:13277semak imbas

Why Does My Multiple Insert Query Fail with

"Ralat semasa menyediakan pertanyaan sisipan berbilang"

Apabila cuba melaksanakan pertanyaan sisipan berbilang, anda mungkin menghadapi ralat seperti "SQLSTATE[HY093]: Parameter tidak sah nombor: parameter tidak ditakrifkan". Ralat ini berlaku apabila bilangan nilai pemegang tempat (?) dalam pertanyaan tidak sepadan dengan bilangan parameter yang dihantar masuk.

Pertimbangkan contoh kod berikut:

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

Dalam senario ini , anda mungkin hairan kerana count($matches) adalah sama dengan count($values) sejurus sebelum execute dipanggil. Walau bagaimanapun, ralat berterusan.

Isu Asas:
Isu asas timbul apabila $values ​​dimulakan dengan nilai sedia ada sebelum mengisinya dengan nilai pemegang tempat. Akibatnya, ketidakpadanan kiraan berlaku.

Penyelesaian:
Untuk menyelesaikan ralat ini, pastikan anda memulakan tatasusunan kosong untuk $values ​​sebelum mengisinya dalam gelung. Ini menjamin bahawa bilangan nilai pemegang tempat sepadan dengan bilangan titik data yang dimasukkan.

Pertimbangan Tambahan:

  • Sahkan bahawa lajur cincang mempunyai indeks unik untuk mengelakkan entri pendua.
  • Gunakan penyata yang disediakan ($stmt) bukannya menyediakan dan laksanakan kaedah.

Contoh 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 Sisipan 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