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..