Heim >Datenbank >MySQL-Tutorial >Warum gibt meine vorbereitete PHP-PDO-Anweisung „SQLSTATE[HY093]: Ungültige Parameternummer' aus?
Das Debuggen einer PHP PDOException kann eine Herausforderung sein, insbesondere wenn Es tritt der Fehler „SQLSTATE[HY093]: Ungültige Parameternummer“ auf. Dieser Fehler weist häufig auf eine falsche Verwendung benannter Parameter in einer vorbereiteten Anweisung hin.
Bedenken Sie den folgenden PHP-Code:
function add_persist($db, $user_id) { $hash = md5("per11".$user_id."sist11".time()); $future = time()+(60*60*24*14); $sql = "INSERT INTO persist (user_id, hash, expire) VALUES (:user_id, :hash, :expire) ON DUPLICATE KEY UPDATE hash=:hash"; $stm = $db->prepare($sql); $stm->execute(array(":user_id" => $user_id, ":hash" => $hash, ":expire" => $future)); return $hash; }
Beim Ausführen dieser Funktion wird der Fehler „SQLSTATE[HY093]: Ungültig“ angezeigt Parameternummer“ auftreten. Die Ursache liegt in der Zeile, in der die Methodeexecute() aufgerufen wird. Insbesondere verwendet die ON DUPLICATE KEY UPDATE hash=:hash-Klausel den gleichen Parameternamen „:hash“ für die Einfüge- und Aktualisierungsvorgänge.
Um dieses Problem zu beheben, müssen Sie einen eindeutigen Parameternamen angeben für den Hashwert in der Update-Klausel. Hier ist der korrigierte Code:
$sql = "INSERT INTO persist (user_id, hash, expire) VALUES (:user_id, :hash, :expire) ON DUPLICATE KEY UPDATE hash=:hash2"; $stm->execute( array(":user_id" => $user_id, ":hash" => $hash, ":expire" => $future, ":hash2" => $hash) );
Durch die Angabe eines eindeutigen Parameternamens „:hash2“ für den Hashwert in der Update-Klausel beheben Sie den Fehler „SQLSTATE[HY093]: Ungültige Parameternummer“. Dadurch wird sichergestellt, dass der PDO-Treiber Parameter korrekt auf die vorbereitete SQL-Anweisung abbilden kann.
Das obige ist der detaillierte Inhalt vonWarum gibt meine vorbereitete PHP-PDO-Anweisung „SQLSTATE[HY093]: Ungültige Parameternummer' aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!