Bonjour à tous, j'arrive pas a résoudre un petit problème, voila sur ma BDD je met un prefix en bdd01-utilisateur -> bdd étant le prefix, mais je me perd un peu pour l’écrire dans une function:
Function connexion($d){
global $PDO;
global $prefix;
$req = $PDO->prepare("SELECT $prefix.'utilisateurs.id',$prefix.'utilisateurs.pseudo', $prefix.'utilisateurs.mail', $prefix.'roles.nom', $prefix.'roles.diminutif', $prefix.'roles.niveau' FROM $prefix.'utilisateurs' LEFT JOIN roles ON $prefix.'utilisateurs.role_id'=role_id WHERE login=:login AND password=:password");
$req->execute($d);
$data = $req->fetchall();
if(count($data)>0){
$_SESSION'Auth'] = $data[0];
return TRUE;
}
return FALSE;
}
La variable préfixe étant bien entendu charger au préalable dans un fichier config.
Le message d'erreur étant:
( ! ) Warning: PDOStatement::execute() [pdostatement.execute]: 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 ''utilisateurs.id',BDD01-.'utilisateurs.login', BDD01-.'utilisateurs.mail', BDD01' at line 1 in C:\wamp\www\xxxx-V1.1\class\class.auth.php on line 11
Donc comment puis-je concaténé ma variable prefix avec la table ? BDD01-.'utilisateurs.login' -> BDD01-utilisateurs.login ?
Merci de m'aider :D
Pour être sur à 100% de la concaténation tu utilises '' donc
'SELECT ....'.$variableAConcatener.' WHERE ...';
Salut, le correct c'est d'utiliser un array().
Cela peut marcher juste en ajoutant $d':prefix'] = $prefix; dans ton code:
$d':prefix'] = $prefix;
$req = $PDO->prepare("SELECT :prefix.'utilisateurs.id',:prefix.'utilisateurs.pseudo', :prefix.'utilisateurs.mail', :prefix.'roles.nom', :prefix.'roles.diminutif', :prefix.'roles.niveau' FROM :prefix.'utilisateurs' LEFT JOIN roles ON :prefix.'utilisateurs.role_id'=role_id WHERE login=:login AND password=:password");
$req->execute($d);
Voila :)