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

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

Linda Hamilton
Libérer: 2024-12-08 07:22:11
original
329 Les gens l'ont consulté

Why Does My PHP PDO Prepared Statement Throw

Exception PDO : numéro de paramètre non valide en PHP

Rencontre de l'erreur "SQLSTATE[HY093] : numéro de paramètre non valide" lors de la tentative d'utilisation de PHP AOP ? La cause sous-jacente peut être liée à l'utilisation des paramètres dans les instructions préparées.

Description du problème :

Dans l'extrait de code fourni :

$sql = "INSERT INTO persist (user_id, hash, expire) VALUES (:user_id, :hash, :expire) ON DUPLICATE KEY UPDATE hash=:hash";
Copier après la connexion

Il y a un marqueur de paramètre ":hash2" manquant dans la clause UPDATE. Cette divergence conduit à l'exception PDO car PDO nécessite des marqueurs de paramètres uniques pour chaque valeur à lier dans l'instruction.

Solution :

Ajustez la requête SQL de l'instruction préparée à ce qui suit :

$sql = "INSERT INTO persist (user_id, hash, expire) VALUES (:user_id, :hash, :expire) ON DUPLICATE KEY UPDATE hash=:hash2";
Copier après la connexion

En conséquence, modifiez l'instructionexecute() pour inclure le paramètre ":hash2" marqueur :

$stm->execute(
    array(
        ":user_id" => $user_id,
        ":hash" => $hash,
        ":expire" => $future,
        ":hash2" => $hash
    )
);
Copier après la connexion

Contexte :

La méthode prepare() de PDO nécessite des marqueurs de paramètres uniques pour lier les valeurs lors de l'appel d'execute(). L'utilisation de marqueurs de paramètres répétés n'est pas autorisée et l'attribution de plusieurs valeurs au même paramètre n'est pas prise en charge dans les clauses telles que la clause "IN()".

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