Bonjour,
J'ai besoin d'un petit coup de main... je galère depuis 4 jours avec un petit bout de script. En général je trouve tout seul mais là je n'ai plus trop de cheveux à arracher !
J'essaie de faire une requête préparée en envoyant ma requête ($sql) et mes valeurs dans un tableau ($args)
$sql = 'SELECT :champs FROM :table WHERE id=:id' ;
$args = array ( 'champs' => $champs, 'table' => $this -> table, 'id' => $this -> id ) ;
echo '<pre>' ; var_dump ( $args ) ; echo '</pre>' ;
$result = MyPDO::getInstance () -> query ( $sql , $args ) ;
La requête passe par un singleton qui est sensé préparer exécuter la requête et renvoyer le résultat.
public function query ( $query , $args ) {
try {
$req = $this -> PDOInstance -> prepare ( $query ) ;
$req -> execute ( $args ) ;
return $req ;
}
catch ( PDOException $e ) {
die ('Exception rencontrée lors de la requête : <br /> <pre>' . $e -> getMessage() . '</pre>' ) ;
}
Mais je rencontre l'erreur suivante (et le tableau passé en argument) :
array(3) {
"champs"]=>
string(1) "*"
"table"]=>
string(5) "blogs"
"id"]=>
int(1)
}
Exception rencontrée lors de la requête :
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''blogs' WHERE id='1'' at line 1
Les arguments envoyés me semblent corrects mais tout me porte à croire que cela vient de là quand même. Par exemple, si le seul argument envoyé est 'id => $this -> id cela fonctionne.
Qu'en pensez-vous ?
Un grand merci par avance pour votre aide !!
$sql = 'SELECT :champs FROM :table WHERE id=:id' ;
L'erreur se situe au niveau de :champs et :table, les variables fonctionnent uniquement pour les conditions après le WHERE.
Pourrais tu tester ce code :
$sql = 'SELECT * FROM blogs WHERE id=:id' ;
En gardant seulement le :id en faite.
Cela fonctionne ?
Oui en effet cela fonctionne si seul le :id varie et je ne comprenais pas pourquoi. Le code d'erreur est vraiment sibyllin !
Entre temps j'avais décidé d'abandonner de tenter de préparer les requêtes pour pouvoir avancer.
Un grand merci à toi pour cette explication !