2013-05-30 4 views
0
$tconn = new PDO('mysql:host='.WW_HST.';dbname='.WW_DB, WW_USR, WW_PS); 
$res = $tconn->prepare('SELECT * FROM :tbl'); 
$res->execute(array(':tbl'=>"ugb")); 

Lorsque j'utilise ce code pour extraire des données de la table 'ugb', je reçois l'erreur suivante:Préparer SQLSTATE d'erreur synatax [42000]

'PDOException' with message '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 ''ugb'' at line 1'

Il est donc remplacer correctement :tbl pour 'ugb' mais si je fais une liaison ou juste exécute avec un tableau, je reçois toujours une erreur. Cela fonctionne bien si je fais juste SELECT * FROM ugb cependant.

Comment puis-je résoudre ce problème? PDO ne vous permet pas de définir des variables dans FROM.

Répondre

2

Vous pouvez uniquement ajouter le nom de la table dans la chaîne de requête.

que je fais habituellement de cette façon:

$allowedTables = array('first', 'second', 'third'); 
if(in_array($tblName, $allowedTables)) { 
    $$res = $tconn->prepare("SELECT * FROM $tblName"); 
} 
-2

Je ne pense pas que AOP vous permettra de lier un paramètre à la FROM. Vous pouvez essayer d'échapper manuellement le paramètre de nom de table et après l'avoir ajouté à la requête comme ceci:

$table = "ugb"; 
$tconn = new PDO('mysql:host='.WW_HST.';dbname='.WW_DB, WW_USR, WW_PS); 
$res = $tconn->prepare('SELECT * FROM '. $tconn->quote($table)); 
$res->execute(); 

Espérons que cela aide.

+0

c'est effrayant. Veuillez lire les commentaires sur la page de manuel pour la fonction que vous avez suggérée. –

+0

Oui, vous avez raison, mais cela peut servir à quelque chose dans ce cas. – lexmihaylov

Questions connexes