CodeIgniter - предложение SQL Query AND со столбцами таблицы

Я новичок в CodeIgniter и борюсь с классом активной записи и апострофами, которые он добавляет к моему запросу:

Это запрос, который 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);

Что я делаю неправильно?

Спасибо

1 ответ

Решение

ActiveRecord where предоставляет параметр, чтобы 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..
Другие вопросы по тегам