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
Linda Hamiltonoriginal
2024-12-08 07:22:11360parcourir

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";

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";

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

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!

Déclaration:
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