„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Warum löst meine vorbereitete PHP-PDO-Anweisung den Fehler „Ungültige Parameternummer“ aus?

Warum löst meine vorbereitete PHP-PDO-Anweisung den Fehler „Ungültige Parameternummer“ aus?

Veröffentlicht am 18.01.2025
Durchsuche:540

Why Does My PHP PDO Prepared Statement Throw an \

Ungültiger Parameternummernfehler in PHP PDO

Beim Versuch, eine vorbereitete Anweisung mit PDO auszuführen, kann der Fehler „SQLSTATE[HY093 ]: Ungültige Parameternummer.“ Dieses Problem entsteht durch die falsche Verwendung von Parametermarkierungen.

Die bereitgestellte Funktion add_persist verwendet die folgende vorbereitete Anweisung:

INSERT INTO persist (user_id, hash, expire) VALUES (:user_id, :hash, :expire) ON DUPLICATE KEY UPDATE hash=:hash

Beim Binden der Parameterwerte mit der Methodeexecute() wird die Funktion verwendet die folgenden Werte:

["user_id" => $user_id, "hash" => $hash, "expire" => $future]

Die vorbereitete Anweisung enthält jedoch einen doppelten Parametermarker für Hash, der von PDO nicht zugelassen wird. Um dieses Problem zu beheben, müssen wir jedem übergebenen Wert eine eindeutige Parametermarkierung zuweisen.

Der korrigierte Code wäre:

$sql = "INSERT INTO persist (user_id, hash, expire)
        VALUES (:user_id, :hash, :expire)
        ON DUPLICATE KEY UPDATE hash=:hash2";

$stm = $db->prepare($sql);

$stm->execute(
    array("user_id" => $user_id, 
          "hash" => $hash, 
          "expire" => $future,
          "hash2" => $hash)
);

Der zusätzliche Parameter :hash2 stellt sicher, dass in der vorbereiteten Anweisung keine doppelten Parametermarkierungen vorhanden sind, wodurch der Fehler behoben wird.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3