Heim >Datenbank >MySQL-Tutorial >Warum schlägt meine vorbereitete PDO-Anweisung beim Einfügen mehrerer Datensätze mit „SQLSTATE[HY093]: Ungültige Parameternummer' fehl?

Warum schlägt meine vorbereitete PDO-Anweisung beim Einfügen mehrerer Datensätze mit „SQLSTATE[HY093]: Ungültige Parameternummer' fehl?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-13 00:06:16419Durchsuche

Why Does My PDO Prepared Statement Fail with

Fehlerbehebung bei SQL-Fehlern beim Einfügen mehrerer Datensätze

In einem kürzlich durchgeführten Entwicklungsprojekt wurde ein Codeausschnitt zum Einfügen mehrerer Datensätze in eine Datenbank mithilfe von a entwickelt Bei der vorbereiteten PDO-Anweisung ist ein Fehler aufgetreten:

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

Trotz der scheinbaren Äquivalenz in der Anzahl der Werte eingefügt (count($matches)) und die Anzahl der Platzhalter (count($values)), ist die Abfrageausführung fehlgeschlagen.

Ursache

Der Fehler wurde verursacht durch ein Missverständnis über die Initialisierung des $values-Arrays. Im Gegensatz zu $matches, das ursprünglich ein leeres Array enthielt, wurde $values ​​mit nicht initialisierten Werten gefüllt. Infolgedessen enthielt $values ​​eine größere Anzahl als $matches, was zum Fehler „Parameter-Mismatch“ führte.

Lösung

Um dieses Problem zu beheben, ist es wichtig, dies explizit zu tun Initialisieren Sie $values ​​als leeres Array, bevor Sie in die Schleife eintreten:

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

Mit dieser Änderung stimmen die Anzahlen von $matches und $values ​​überein, sodass dies möglich ist Die Abfrage soll erfolgreich ausgeführt werden.

Zusätzliche Überlegungen

Darüber hinaus ist es ratsam sicherzustellen, dass die Hash-Spalte in der Zieltabelle über einen eindeutigen Index verfügt, um doppelte Schlüssel zu verarbeiten Konflikte. Dies kann erreicht werden, indem nach der INSERT-Anweisung die folgende Zeile hinzugefügt wird:

ON DUPLICATE KEY UPDATE hash=values(hash)

Das obige ist der detaillierte Inhalt vonWarum schlägt meine vorbereitete PDO-Anweisung beim Einfügen mehrerer Datensätze 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