0

我是 CodeIgniter 的新手,我正在努力处理 Active Record 类及其添加到我的查询中的撇号:

这是 CodeIgniter 输出的查询(通过 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 和 pass1 是登录表单中的字符串(忽略明文密码)。这会产生 0 个结果。

但是正确的查询,即我想要的结果是:

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 

唯一的区别是倒数第二行,login.pessoa_nBI 没有被撇号包围。

这会产生一个结果,因为它应该。数据库是 MySQL。

编辑:这是活动记录代码:

$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);

我究竟做错了什么?

谢谢

4

1 回答 1

2

Activerecordwhere提供了一个参数,因此 codigniter 不会转义您的数据

$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);

您可以使用连接进行查询

$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..
于 2013-05-18T22:51:08.370 回答