"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-10-31
Parcourir:709

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 s'aligne pas avec le 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;
}

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 la table :

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;
}
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3