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
Patricia ArquetteOriginal
2024-12-16 08:48:16863Durchsuche

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;
}

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!

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