"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Pourquoi ma déclaration préparée par PHP PDO renvoie-t-elle une erreur « Numéro de paramètre non valide » ?

Pourquoi ma déclaration préparée par PHP PDO renvoie-t-elle une erreur « Numéro de paramètre non valide » ?

Publié le 2025-01-18
Parcourir:208

Why Does My PHP PDO Prepared Statement Throw an \

Erreur de numéro de paramètre non valide dans PHP PDO

Lorsque vous essayez d'exécuter une instruction préparée à l'aide de PDO, vous pouvez rencontrer l'erreur "SQLSTATE[HY093 ] : Numéro de paramètre invalide." Ce problème est dû à une utilisation incorrecte des marqueurs de paramètres.

La fonction fournie add_persist utilise l'instruction préparée suivante :

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

Lors de la liaison des valeurs des paramètres à l'aide de la méthodeexecute(), la fonction utilise le valeurs suivantes :

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

Cependant, l'instruction préparée contient un marqueur de paramètre en double pour le hachage, ce qui n'est pas autorisé par PDO. Pour résoudre ce problème, nous devons attribuer un marqueur de paramètre unique pour chaque valeur transmise.

Le code corrigé serait :

$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)
);

Le paramètre supplémentaire :hash2 garantit qu'il n'y a pas de marqueurs de paramètre en double dans l'instruction préparée, résolvant ainsi l'erreur.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3