Heim >Datenbank >MySQL-Tutorial >Warum schlägt meine mehrteilige INSERT-Abfrage fehl und wie kann ich das Problem beheben?

Warum schlägt meine mehrteilige INSERT-Abfrage fehl und wie kann ich das Problem beheben?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-25 07:36:28972Durchsuche

Why Does My Multi-Part INSERT Query Fail, and How Can I Fix It?

Failed Execution of Multiple Insert Query: Ursache und Lösung

Die Ausführung einer mehrteiligen Einfügeanfrage kann mit folgender Fehlermeldung scheitern:

SQLSTATE[HY093]: Invalid parameter number: parameter was not defined

แม้ว่าก่อนเรียกใช้ count($matches) mit count($values) übereinstimmen wird, könnte es zu diesem Fehler kommen.

Die Ursache dieses Fehlers liegt darin, dass die Anzahl der Elemente in $values nicht mit der Anzahl der Elemente in $matches übereinstimmt. Wenn $values und $matches nicht die gleiche Anzahl von Elementen enthalten, schlägt die Einfügeanfrage fehl, da die Abfrage X Parameter erwartet, aber nur Y Datenelemente ($matches) erhält. In diesem Fall enthält $values höchstwahrscheinlich bereits Werte. Aus diesem Grund stimmen die Anzahl der Elemente nicht überein.

Um dieses Problem zu vermeiden, muss ein Array immer vor der Schleife initialisiert werden.

Darüber hinaus muss sichergestellt werden, dass die Spalte "hash" einen eindeutigen Index enthält.

Hier ist ein Beispiel für eine korrigierte Codestruktur:

$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 mehrteilige INSERT-Abfrage fehl und wie kann ich das Problem beheben?. 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