Maison > développement back-end > tutoriel php > Pourquoi est-ce que j'obtiens l'erreur « Incompatibilité du nombre de variables de liaison » dans les instructions préparées par MySQLi ?

Pourquoi est-ce que j'obtiens l'erreur « Incompatibilité du nombre de variables de liaison » dans les instructions préparées par MySQLi ?

Patricia Arquette
Libérer: 2024-10-27 19:31:30
original
835 Les gens l'ont consulté

Why Am I Getting

Nombre de variables de liaison incompatibles dans l'insertion d'une instruction préparée

Lors de l'exécution d'une instruction INSERT à l'aide d'instructions préparées MySQLi, les utilisateurs peuvent rencontrer l'erreur : " Le nombre de variables de liaison ne correspond pas au nombre de champs dans l'instruction préparée."

Ce problème survient lorsque le nombre de variables de liaison fournies dans la méthode bind_param() ne correspond pas au nombre d'espaces réservés dans la requête INSERT. . Par exemple, considérons l'extrait de code ci-dessous :

if($stmt = $conn->prepare("INSERT INTO login(user, pass) VALUES(?, ?)")) {

  /* Bind parameters s - string, b - blob, i - int, etc */
  $stmt->bind_param("ss", $user, $pw);

  /* Execute it */
  $stmt->execute();

  /* Bind results */
  $stmt->bind_result($user, $pw);

  /* Close statement */
  $stmt->close();
  $userId = $conn->insert_id;
}
Copier après la connexion

Dans ce code, l'instruction INSERT comporte deux espaces réservés (?) : un pour l'utilisateur et un pour le laissez-passer. Cependant, la méthode bind_param() lie deux variables ($user, $pw) aux espaces réservés. Cela entraîne une erreur de non-concordance.

La solution consiste à supprimer l'appel à la méthode bind_result() puisque l'instruction INSERT ne renvoie aucun résultat. Le code mis à jour ci-dessous insère correctement les données dans le tableau :

if($stmt = $conn->prepare("INSERT INTO login(user, pass) VALUES(?, ?)")) {

  /* Bind parameters s - string, b - blob, i - int, etc */
  $stmt->bind_param("ss", $user, $pw);

  /* Execute it */
  $stmt->execute();

  /* Close statement */
  $stmt->close();
  $userId = $conn->insert_id;
}
Copier après la connexion

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