Page 1 sur 1

probleme prepare et execute

Posté : 15 avr. 2010, 13:18
par aquaz
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...

Re: probleme prepare et execute

Posté : 15 avr. 2010, 13:43
par stealth35
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'

Re: probleme prepare et execute

Posté : 15 avr. 2010, 14:24
par aquaz
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...

Re: probleme prepare et execute

Posté : 15 avr. 2010, 14:27
par stealth35
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.