probleme prepare et execute

aquaz
Invité n'ayant pas de compte PHPfrance

15 avr. 2010, 13:18

Bonjour,
J'ai un souci avec les requêtes préparés avec PDO:
ce code marche très bien:
$req = $bdd->query("SELECT pseudo, message FROM miniChat ORDER BY id DESC LIMIT ". $begin . "," . MAX);
mais dès que je veux utiliser une requête préparée pour éviter de concaténer les variables ca marche plus:
$req = $bdd->prepare('SELECT pseudo, message FROM miniChat ORDER BY id DESC LIMIT ? , ?');
$req->execute(array($begin,MAX));
j'ai essayé aussi de transtyper $begin et MAX en string sans succès
Mais bizaremment ca marche avec $req->bindParam et bindValue...

ViPHP
ViPHP | 5462 Messages

15 avr. 2010, 13:43

c'est normale, dans ce cas la faut faire :
$req = $bdd->prepare('SELECT pseudo, message FROM miniChat ORDER BY id DESC LIMIT ? , ?');
$req->bindValue(1, $begin, PDO::PARAM_INT);
$req->bindValue(2, MAX, PDO::PARAM_INT);
$req->execute();
dixit la doc :
Un tableau de valeurs avec autant d'éléments qu'il y a de paramètres à associer dans la requête SQL qui sera exécutées. Toutes les valeurs sont traitées comme des constantes PDO::PARAM_STR.
http://www.php.net/manual/fr/pdostatement.execute.php


ducoup comme il les prend en string il les quote ce qui donne (par exmple)
SELECT pseudo, message FROM miniChat ORDER BY id DESC LIMIT '0' , '5'

aquaz
Invité n'ayant pas de compte PHPfrance

15 avr. 2010, 14:24

Merci pour cette réponse rapide, donc le exécute ne marche que si les marqueurs sont des chaînes sinon il faut utiliser bindParam apparemment...

ViPHP
ViPHP | 5462 Messages

15 avr. 2010, 14:27

Merci pour cette réponse rapide, donc le exécute ne marche que si les marqueurs sont des chaînes sinon il faut utiliser bindParam apparemment...
voila, enfin attention y'a une difference entre bindParam et bindValue, je te conseil plutôt d'utiliser bindValue.