Heim >Backend-Entwicklung >PHP-Tutorial >Warum erhalte ich den Fehler „SQLSTATE[HY093]: Ungültige Parameternummer' in meinem PHP-PDO-Code?

Warum erhalte ich den Fehler „SQLSTATE[HY093]: Ungültige Parameternummer' in meinem PHP-PDO-Code?

Barbara Streisand
Barbara StreisandOriginal
2024-11-24 15:50:17928Durchsuche

Why Am I Getting a

Fehler: Ungültige Parameternummer in PHP PDOException

Beim Versuch, die Funktion add_persist auszuführen, stoßen Entwickler möglicherweise auf den Fehler „SQLSTATE[HY093]: Ungültige Parameternummer.“ Dieser Fehler ist auf eine falsche Parameterbindung innerhalb der SQL-Abfrage zurückzuführen.

Im bereitgestellten Code versucht die $sql-Anweisung, eine Zeile in der Persistenztabelle zu aktualisieren, indem sie die Befehle INSERT und ON DUPLICATE KEY UPDATE ausführt. Allerdings gibt es eine Diskrepanz in den Parameterbindungen innerhalb des $stm->execute-Aufrufs. Insbesondere erscheint der :hash-Parameter zweimal, aber laut PDO-Dokumentation darf jede eindeutige Parametermarkierung nur einmal an einen Wert gebunden sein.

Um dieses Problem zu beheben, sollte die $sql-Abfrage so geändert werden, dass sie einen eindeutigen Parameter enthält Parametermarkierung für jeden übergebenen Wert, wie folgt:

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

Zusätzlich sollte der $stm->execute-Aufruf Bindungen sowohl für :hash als auch enthalten :hash2-Parameter:

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

Durch die Behebung dieses Parameterbindungsproblems führt die Funktion add_persist die SQL-Abfrage korrekt aus, ohne den Fehler „Ungültige Parameternummer“ auszulösen.

Das obige ist der detaillierte Inhalt vonWarum erhalte ich den Fehler „SQLSTATE[HY093]: Ungültige Parameternummer' in meinem PHP-PDO-Code?. 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