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

3 réponses


golendercaria
Réponse acceptée

Pour être sur à 100% de la concaténation tu utilises '' donc

'SELECT ....'.$variableAConcatener.' WHERE ...';
codimix
Réponse acceptée

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 :)

neocorp
Auteur

J'ai mis de coté le faite de rajouté un préfixe, merci de vos réponses ;)