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
Lepaskan: 2024-12-05 02:09:13
asal
215 orang telah melayarinya

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

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

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!

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