Maison > base de données > tutoriel mysql > Pourquoi ma déclaration préparée MySQL échoue-t-elle avec une erreur « Le nombre d'éléments dans la chaîne de définition de type ne correspond pas au nombre de variables de liaison » ?

Pourquoi ma déclaration préparée MySQL échoue-t-elle avec une erreur « Le nombre d'éléments dans la chaîne de définition de type ne correspond pas au nombre de variables de liaison » ?

Barbara Streisand
Libérer: 2024-11-19 00:16:02
original
669 Les gens l'ont consulté

Why Does My MySQL Prepared Statement Fail with a

Le mystère des variables de liaison incompatibles

La question tourne autour d'une erreur rencontrée lors de la liaison des paramètres pour une instruction détaillée préparée par MySQL. Le problème réside dans l'inadéquation entre le nombre d'indicateurs de type "s" dans la méthode bind_param et le nombre de points d'interrogation (?) dans la chaîne de requête.

Comprendre bind_param()

bind_param() est une méthode mysqli qui remplace les points d'interrogation (?) dans une requête préparée par des données réelles. Chaque caractère de la chaîne de définition de type (par exemple, "s" pour chaîne) correspond à un point d'interrogation et aux données à lier.

Correspondance au nombre de variables de liaison

Le point critique à retenir est que le nombre de caractères dans la chaîne de définition de type (par exemple, "s,s,s") doit correspondre précisément au nombre de points d'interrogation (?) dans la requête. chaîne. Par exemple, une requête avec 3 points d'interrogation nécessite une chaîne de définition de type avec 3 caractères "s".

Examen du code

Dans le code PHP donné, la requête La chaîne contient 65 points d'interrogation, mais la méthode bind_param() utilise "s,s,s,s,s,s,s,s" (un total de seulement 8 caractères "s"). Cette divergence entraîne le message d'erreur : "Le nombre d'éléments dans la chaîne de définition de type ne correspond pas au nombre de variables de liaison."

Pour résoudre le problème :

Pour Corrigez le problème, vérifiez que le nombre de caractères « s » dans la méthode bind_param() correspond au nombre de points d'interrogation (?) dans la chaîne de requête. Dans ce cas, la méthode bind_param() doit être remplacée par :

$stmt->bind_param("sssssssssssssssssssssssssssssssssssssssssssssssssssssssssss", ...);
Copier après la connexion

Notes supplémentaires :

  • Les caractères de la chaîne de définition de type ne doivent pas être séparés par des virgules.
  • Le format décrit dans la page de manuel pour mysqli_stmt::bind_param() doit être suivi.

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