Maison > base de données > tutoriel mysql > Pourquoi ma déclaration préparée par PHP PDO renvoie-t-elle « SQLSTATE[HY093] : numéro de paramètre invalide » ?

Pourquoi ma déclaration préparée par PHP PDO renvoie-t-elle « SQLSTATE[HY093] : numéro de paramètre invalide » ?

Patricia Arquette
Libérer: 2024-12-16 08:48:16
original
965 Les gens l'ont consulté

Why Does My PHP PDO Prepared Statement Throw

PHP PDOException : "SQLSTATE[HY093] : Invalid Parameter Number"

Le débogage d'une PHP PDOException peut être difficile, surtout lorsque rencontrer l'erreur « SQLSTATE[HY093] : numéro de paramètre non valide ». Cette erreur indique souvent une utilisation incorrecte des paramètres nommés dans une instruction préparée.

Considérez le code PHP suivant :

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

Lors de l'exécution de cette fonction, l'erreur "SQLSTATE[HY093] : Invalid numéro de paramètre" peut survenir. La cause première réside dans la ligne où la méthodeexecute() est appelée. Plus précisément, la clause ON DUPLICATE KEY UPDATE hash=:hash utilise le même nom de paramètre, ":hash", pour les opérations d'insertion et de mise à jour.

Pour résoudre ce problème, vous devez fournir un nom de paramètre unique. pour la valeur de hachage dans la clause de mise à jour. Voici le code corrigé :

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

En fournissant un nom de paramètre unique, ":hash2", pour la valeur de hachage dans la clause de mise à jour, vous résolvez l'erreur "SQLSTATE[HY093] : numéro de paramètre non valide". Cela garantit que le pilote PDO peut mapper correctement les paramètres à l'instruction SQL préparée.

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!

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