Heim >Backend-Entwicklung >PHP-Tutorial >Warum schlägt meine Mehrfacheinfügungsabfrage mit „SQLSTATE[HY093]: Ungültige Parameternummer' fehl?

Warum schlägt meine Mehrfacheinfügungsabfrage mit „SQLSTATE[HY093]: Ungültige Parameternummer' fehl?

Susan Sarandon
Susan SarandonOriginal
2024-12-05 02:09:13207Durchsuche

Why Does My Multiple Insert Query Fail with

„Fehler beim Vorbereiten einer Mehrfacheinfügungsabfrage“

Beim Versuch, eine Mehrfacheinfügungsabfrage auszuführen, kann ein Fehler wie „SQLSTATE[HY093]: Ungültiger Parameter“ auftreten Nummer: Parameter wurde nicht definiert". Dieser Fehler tritt auf, wenn die Anzahl der Platzhalterwerte (?) in der Abfrage nicht mit der Anzahl der übergebenen Parameter übereinstimmt.

Betrachten Sie das folgende Codebeispiel:

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

In diesem Szenario , könnten Sie verwirrt sein, weil count($matches) gleich count($values) ist, kurz bevor „execute“ aufgerufen wird. Der Fehler bleibt jedoch bestehen.

Grundlegendes Problem:
Das zugrunde liegende Problem tritt auf, wenn $values ​​mit vorhandenen Werten initialisiert wird, bevor es mit Platzhalterwerten gefüllt wird. Infolgedessen kommt es zu einer Nichtübereinstimmung der Anzahl.

Lösung:
Um diesen Fehler zu beheben, stellen Sie sicher, dass Sie ein leeres Array für $values ​​initialisieren, bevor Sie es innerhalb der Schleife füllen. Dadurch wird gewährleistet, dass die Anzahl der Platzhalterwerte mit der Anzahl der eingefügten Datenpunkte übereinstimmt.

Zusätzliche Überlegungen:

  • Stellen Sie sicher, dass die Hash-Spalte einen eindeutigen Index hat um doppelte Einträge zu verhindern.
  • Verwenden Sie eine vorbereitete Anweisung ($stmt) anstelle der Vorbereitung und Ausführung Methoden.

Überarbeitetes Codebeispiel:

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

Das obige ist der detaillierte Inhalt vonWarum schlägt meine Mehrfacheinfügungsabfrage mit „SQLSTATE[HY093]: Ungültige Parameternummer' fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn