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
Lepaskan: 2024-12-13 18:14:10
asal
263 orang telah melayarinya

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

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

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!

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