Maison > développement back-end > tutoriel php > Pourquoi mon instruction préparée par PHP PDO renvoie-t-elle une erreur « Numéro de paramètre invalide » ?

Pourquoi mon instruction préparée par PHP PDO renvoie-t-elle une erreur « Numéro de paramètre invalide » ?

Susan Sarandon
Libérer: 2024-11-25 09:25:18
original
232 Les gens l'ont consulté

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
Copier après la connexion

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

["user_id" => $user_id, "hash" => $hash, "expire" => $future]
Copier après la connexion

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)
);
Copier après la connexion

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal