Maison >développement back-end >tutoriel php >Pourquoi mon code PHP PDO génère-t-il une erreur « SQLSTATE[HY093] : numéro de paramètre invalide » ?

Pourquoi mon code PHP PDO génère-t-il une erreur « SQLSTATE[HY093] : numéro de paramètre invalide » ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-30 06:51:10824parcourir

Why Does My PHP PDO Code Throw a

PDOException : "SQLSTATE[HY093] : numéro de paramètre non valide" en PHP

Lorsque vous rencontrez l'erreur "SQLSTATE[HY093] : numéro de paramètre non valide" lors de l'utilisation du PDO de PHP , cela indique généralement un problème avec la liaison des paramètres dans l'instruction SQL. Dans ce cas précis, le nombre d'espaces réservés nommés dans l'instruction SQL préparée ne correspond pas au nombre de valeurs transmises à la méthode execute().

Le code fourni apparaît inséré dans la table persistante, avec les colonnes uniques user_id, hash et expire, et met à jour la colonne de hachage si une ligne avec l'user_id fourni existe déjà. Cependant, l'instruction SQL contient un marqueur de paramètre nommé en double pour :hash.

Pour résoudre cette erreur, vous pouvez utiliser un paramètre nommé différent pour la clause ON DUPLICATE KEY UPDATE. Voici le code corrigé :

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

Dans cette version corrigée, le paramètre :hash2 est utilisé pour résoudre le problème de liaison, garantissant que l'instruction SQL contient le nombre correct d'espaces réservés et de valeurs.

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