Maison > base de données > tutoriel mysql > Pourquoi l'utilisation du même paramètre nommé deux fois dans une requête PDO INSERT...ON DUPLICATE KEY UPDATE provoque-t-elle une erreur « Numéro de paramètre non valide » ?

Pourquoi l'utilisation du même paramètre nommé deux fois dans une requête PDO INSERT...ON DUPLICATE KEY UPDATE provoque-t-elle une erreur « Numéro de paramètre non valide » ?

Susan Sarandon
Libérer: 2024-12-10 14:57:09
original
752 Les gens l'ont consulté

Why Does Using the Same Named Parameter Twice in a PDO INSERT...ON DUPLICATE KEY UPDATE Query Cause a

PHP PDOException : numéro de paramètre non valide

Problème :

Lors de la construction d'une requête INSERT avec une clause ON DUPLICATE KEY UPDATE, utilisant deux fois un marqueur de paramètre nommé dans la méthodeexecute() peut conduire à l'erreur Erreur « SQLSTATE[HY093] : Numéro de paramètre non valide ».

Solution :

Pour résoudre ce problème, attribuez différents marqueurs de paramètre pour chaque valeur dans la méthodeexecute() . Voici le code mis à jour :

$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

Explication :

La documentation PDO indique que "Vous ne pouvez pas utiliser deux fois un marqueur de paramètre nommé du même nom dans une instruction préparée ". En effet, chaque valeur transmise à la requête doit avoir un marqueur de paramètre unique. En attribuant différents marqueurs de paramètres pour la valeur de hachage mise à jour (:hash2), le problème est résolu.

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