BUG : Requête PDO avec clause IN
Résolu/Fermé
A voir également:
- BUG : Requête PDO avec clause IN
- Bug yahoo mail - Accueil - Mail
- Bug chatgpt - Accueil - Intelligence artificielle
- Bug localisation snap ✓ - Forum Snapchat
- Bug yahoo mail 27 fevrier 2024 ✓ - Forum Yahoo mail
- Iptv bug - Forum Box et Streaming vidéo
5 réponses
Bonjour
À tout hasard... Ton tableau $id ne serait-il pas un tableau associatif ? Si c'est le cas, ton bindParam est fait avec un indice qui n'est pas simplement 1,2,3...
À tout hasard... Ton tableau $id ne serait-il pas un tableau associatif ? Si c'est le cas, ton bindParam est fait avec un indice qui n'est pas simplement 1,2,3...
Non, il s'agit d'un simple array du genre :
[0] => [111111]
[1] => [982614]
......
Edit :
Voici un exemple de var_dump de $id :
[0] => [111111]
[1] => [982614]
......
Edit :
Voici un exemple de var_dump de $id :
array 0 => string '11111' (length=5) 1 => string '30000734' (length=8) 2 => string '30001034' (length=8) 3 => string '30001506' (length=8) 4 => string '30001882' (length=8) 5 => string '30002967' (length=8)
Problème résolu :
Il semblerait que lors du foreach, bindParam a besoin de référence, et non pas de valeur. Il faut donc remplacer :
par :
Solution trouvée dans les commentaires sur l'explication de bindParam , sur php.net : http://www.php.net/manual/fr/pdostatement.bindparam.php
Il semblerait que lors du foreach, bindParam a besoin de référence, et non pas de valeur. Il faut donc remplacer :
foreach ($id as $k => $idD)
par :
foreach ($id as $k => &$idD)
Solution trouvée dans les commentaires sur l'explication de bindParam , sur php.net : http://www.php.net/manual/fr/pdostatement.bindparam.php
J'aurai appris quelque chose... N'utilisant pas encore PDO, je ne connaissais pas le rôle exact de cette fonction.
Si j'ai bien compris, une autre façon de résoudre le problème eût été d'utiliser bindValue, qui associe une valeur au ?, alors que bindParam associe (une référence à ) une variable.
Si j'ai bien compris, une autre façon de résoudre le problème eût été d'utiliser bindValue, qui associe une valeur au ?, alors que bindParam associe (une référence à ) une variable.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Je te donne l'explication que j'ai compris personnellement, mais je ne suis pas sûr qu'elle soit totalement exact :
* Si on utilise bindValue, on doit entrer les valeurs sans passer par des variables.
* En utilisant bindParam, on peut alors passer des variables (Par contre, on n'est pas obligé de passer toujours des références : si on n'utilise pas de clause IN, je n'ai aucun problème avec cette fonction en utilisant directement $var.).
Le vrai but d'utiliser bindParam pour moi, c'est qu'il n'est plus nécessaire de faire des mysql_real_escape_string(), addslashes(), etc .... pour vérifier les valeurs reçuent : PDO les sécurisant automatiquement. C'est pourquoi j'utilise uniquement du PDO actuellement car il simplifie nettement les vérifications.
* Si on utilise bindValue, on doit entrer les valeurs sans passer par des variables.
* En utilisant bindParam, on peut alors passer des variables (Par contre, on n'est pas obligé de passer toujours des références : si on n'utilise pas de clause IN, je n'ai aucun problème avec cette fonction en utilisant directement $var.).
Le vrai but d'utiliser bindParam pour moi, c'est qu'il n'est plus nécessaire de faire des mysql_real_escape_string(), addslashes(), etc .... pour vérifier les valeurs reçuent : PDO les sécurisant automatiquement. C'est pourquoi j'utilise uniquement du PDO actuellement car il simplifie nettement les vérifications.