2013-05-18 3 views
0

Je suis nouveau à CodeIgniter et je suis aux prises avec le soutien actif et enregistrement de classe les apostrophes ajoute à ma requête:CodeIgniter - requête SQL ET clause avec des colonnes de table

C'est la requête que les sorties CodeIgniter (Via enable_profiler):

SELECT `login`.`idlogin`, `login`.`username`, `login`.`password` 
FROM (`login`, `pessoa`) 
WHERE `login`.`username` = 'user1' 
AND `login`.`password` = 'pass1' 
AND `pessoa`.`nBI` = 'login.pessoa_nBI' 
LIMIT 1 

user1 et pass1 sont des chaînes d'une forme de connexion (ignorer le mot de passe en texte clair clair). Cela produit 0 résultats.

Cependant la requête correcte, à savoir le résultat que je veux est:

La seule différence
SELECT `login`.`idlogin` , `login`.`username` , `login`.`password` 
FROM (`login` , `pessoa`) 
WHERE `login`.`username` = 'user1' 
AND `login`.`password` = 'pass1' 
AND `pessoa`.`nBI` = login.pessoa_nBI 
LIMIT 1 

est l'avant-dernière ligne, login.pessoa_nBI n'est pas entouré par une apostrophe.

Qui produit un résultat, comme il se doit. La base de données est MySQL.

Edit: Voici le code d'enregistrement actif:

$this -> db -> select('login.idlogin, login.username, login.password'); 
$this -> db -> from('login,pessoa); 
$this -> db -> where('login.username', $username); 
$this -> db -> where('login.password', $password); 
$this -> db -> where('pessoa.nBI', login.pessoa_nBI'); 
$this -> db -> limit(1); 

Qu'est-ce que je fais mal?

Merci

+0

peut vous poster votre requête d'enregistrement active réelle? – dm03514

Répondre

2

activerecord where fournit un paramètre si CodeIgniter n'échappe pas vos données

$this->db->where() accepts an optional third parameter. 
// If you set it to FALSE, CodeIgniter will not try to protect your field or 
// table names with backticks. 

$this->db->where('MATCH (field) AGAINST ("value")', NULL, FALSE); 

Vous pouvez utiliser un join bien pour votre requête

$this->db->select('l.idLogin, l.username, l.password'); 
$this->db->from('login AS l'); 
$this->db->join('pessoa', 'pessoa.nBI = l.pessoa_nBI'); 
$this->db->where('l.username', 'usernam'); 
etc.. 
+0

Join est le chemin à parcourir. – rcdmk

+0

Oui. Join résout le problème. Est-ce que joindre a un impact significatif sur les performances par rapport à ce que j'ai fait? –

+0

profil chaque requête avec 'EXPLAIN', je crois que votre requête faisait une jointure il n'utilisait pas une instruction JOIN – dm03514

Questions connexes