Heim > Datenbank > MySQL-Tutorial > Warum gibt meine vorbereitete PHP-PDO-Anweisung „SQLSTATE[HY093]: Ungültige Parameternummer' aus?

Warum gibt meine vorbereitete PHP-PDO-Anweisung „SQLSTATE[HY093]: Ungültige Parameternummer' aus?

Patricia Arquette
Freigeben: 2024-12-16 08:48:16
Original
861 Leute haben es durchsucht

Why Does My PHP PDO Prepared Statement Throw

PHP PDOException: „SQLSTATE[HY093]: Ungültige Parameternummer“

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;
}
Nach dem Login kopieren

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)
);
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage