Почему CodeIgniter не возвращает результат запроса SQL, если в нем есть скобки? - PullRequest
0 голосов
/ 31 августа 2011

Когда у меня есть встроенный SQL-запрос, который содержит скобки в одном из значений поиска, я не получаю ожидаемый результат. Однако, если я выполню запрос к своей базе данных напрямую, я получу ожидаемый результат.

Кроме того, если мой поиск не содержит скобок, он вернет ожидаемый результат.

Функция модели CodeIgniter:

function get_submodels($params)
{
 $sql = "SELECT DISTINCT(`a`.`submodel`), `a`.`model_id` FROM `models` AS `a`"
 . "LEFT JOIN `manufacturers` AS `b` ON `a`.`manufacturer` = `b`.`manufacturer_id`"
 . "WHERE `a`.`year` = ? AND `b`.`manufacturer` = ? AND `a`.`model` = ?"
 . "ORDER BY `a`.`submodel` ASC;";

 $query = $this->db->query($sql, $params);

 return $query->result();
}

Пример рабочего запроса:

"... WHERE `a`.`year` = '2007' AND `b`.`manufacturer` = 'CHEVROLET' AND `a`.`model` = 'MONTE CARLO'"

Пример нерабочего запроса:

"... WHERE `a`.`year` = '2007' AND `b`.`manufacturer` = 'MERCEDES BENZ' AND `a`.`model` = 'CLK350 (W209)'"

Я использовал $ this-> db-> last_query (), и запрос отформатирован правильно. Даже при копировании последнего запроса, который не дал результатов, и непосредственном запуске его к базе данных, вы получите ожидаемый результат.

1 Ответ

1 голос
/ 31 августа 2011

Несмотря на запуск $ this-> db-> last_query () и нахождение запроса как правильного, я решил включить профилирование на странице. Мои результаты показывают, что скобки были закодированы в HTML-сущности.

Поэтому запрос формировался так:

"... WHERE `a`.`year` = '2007' AND `b`.`manufacturer` = 'MERCEDES BENZ' AND `a`.`model` = 'CLK350 (W209)'"

Вместо этого:

"... WHERE `a`.`year` = '2007' AND `b`.`manufacturer` = 'MERCEDES BENZ' AND `a`.`model` = 'CLK350 (W209)'"

Я решил эту проблему, изменив запрос вставки, чтобы использовать htmlentities для этих столбцов, и обновил все существующие записи. Хотя я знал, что Codeigniter будет избегать значений, я не знал, что он также закодирует их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...