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 ?
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; }
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; }
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!