Rumah >pangkalan data >tutorial mysql >Mengapa Pertanyaan Sisipan Berbilang Saya Mengembalikan 'Nombor Parameter Tidak Sah'?

Mengapa Pertanyaan Sisipan Berbilang Saya Mengembalikan 'Nombor Parameter Tidak Sah'?

Susan Sarandon
Susan Sarandonasal
2024-12-13 18:14:10264semak imbas

Why Does My Multiple Insert Query Return

Ralat: Nombor Parameter Tidak Sah dalam Pertanyaan Sisip Berbilang

Apabila cuba memasukkan berbilang rekod ke dalam jadual pangkalan data, anda mungkin menghadapi "Nombor parameter tidak sah: parameter tidak ditakrifkan" ralat. Ini berlaku apabila bilangan parameter yang dinyatakan dalam pertanyaan tidak sepadan dengan bilangan nilai yang diberikan sebagai input.

Memahami Isu

Dalam coretan kod yang disediakan:

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

// Build query
$q = $this->dbc->prepare("INSERT INTO hashes (hash) VALUES " . implode(', ', $values) . " ON DUPLICATE KEY UPDATE hash = hash");
$q->execute($matches);

Matlamatnya adalah untuk memasukkan nilai dalam $matches ke dalam jadual cincang, menggunakan pernyataan yang disediakan. Walau bagaimanapun, ralat berlaku kerana bilangan parameter pemegang tempat (?) dalam tatasusunan $values ​​tidak sepadan dengan data sebenar dalam $matches.

Betulkan

Untuk menyelesaikan isu ini, pastikan berikut:

  1. Memulakan tatasusunan: Sentiasa mulakan tatasusunan $values ​​sebelum gelung untuk mengelakkan nilai sedia ada.
  2. Sahkan kiraan data: Sahkan bahawa bilangan elemen dalam $values ​​adalah sama dengan bilangan elemen dalam $matches. Jika tidak, laraskan gelung atau tambah semakan bersyarat.
  3. Buat indeks unik: Semak sama ada lajur cincang mempunyai indeks unik. Ini menghalang entri pendua dan memastikan setiap nilai yang disediakan dimasukkan atau dikemas kini.
  4. Gunakan pernyataan berparameter: Gunakan pernyataan yang disediakan untuk mengelakkan suntikan SQL dan isu pengikatan parameter.

Contoh

$matches = array('1');
$values = [];
$count = count($matches);

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

// Insert query with named parameters (:hash)
$sql = "INSERT INTO hashes (hash) VALUES (:hash) ON DUPLICATE KEY UPDATE hash = VALUES(:hash)";
$stmt = $dbh->prepare($sql);
$data = $stmt->execute([':hash' => $matches]);

Atas ialah kandungan terperinci Mengapa Pertanyaan Sisipan Berbilang Saya Mengembalikan '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