Bien que cette question particulière n'est pas un vrai, comme code fourni ne produira jamais une erreur comme celle-ci, il semble que Google prend plaisir à envoyer des visiteurs à ce p âge. Pour qui est la réponse qui suit:
Ce problème ne peut jamais être causé par l'appel de méthode query()
, car il appartient essentiellement à l'instruction préparée. L'erreur elle-même est assez claire: "nombre de jetons" représente le nombre de jetons ?
ou :name
dans la requête (également appelée "espace réservé"), tandis que "nombre de variables liées" représente les variables qui étaient éther lié via bindValue
ou `bindParam, ou envoyé via execute (ce qui est techniquement le même). Ainsi, quand on essaye de lier plus de variables que de jetons définis dans la requête, PDO soulève cette erreur.
Par exemple, s'il y a une requête préparée sans jetons définis, mais nous essayons de lier une variable à elle:
$stmt = $db->prepare('SELECT * FROM objects o WHERE o.object_id = 1');
$stmt->execute(array($id));
il se traduira par le très message d'erreur en question, le nombre des variables liées (1) ne correspond pas au nombre de jetons (0).
Pour résoudre ce problème, il suffit de comparer soigneusement le nombre de jetons dans la requête préparée avec le nombre de variables liées à l'instruction.
Y a-t-il une raison pour laquelle vous n'utilisez pas l'ORM? –
@YourCommonSense Maintenant que cette question fait (indirectement) l'objet d'un [meta post] (http://meta.stackoverflow.com/q/253911/176646), cela peut arriver plus tôt. – ThisSuitIsBlackNot