ORDER BY RAND() в CI 1.7

Нашли ошибку в CI? — пишем сюда!

ORDER BY RAND() в CI 1.7

Сообщение maxnag 22 янв 2009, 11:13

Вчера нашел ошибку в неправильном формировании запроса.
Делаю так
Код: Выделить всё
$this->db->order_by('some_field','random');
на выходе должно быть ORDER BY RAND() получаю ORDER BY ` RAND().

Начал копать, разобрался (сделал у себя для мускуля). Ищем в файле /system/database/drivers/mysql/mysql_driver.php метод function _escape_identifiers($item) (431 строка, если ничего не трогали). В нем есть в возврате данных ф-цией. Дело в том, что переменая $item для текущей сортировки не нужна, а в методе стоит проверка на двойные ``, ну если мы уже в запросе ввели, тогда метод должен исключить дубликаты. Поулчается, т.к. переменной нет, то идет `` и регуляркой обрезаем одну ` и получаем ошибку в запросе.

Было:
Код: Выделить всё
return preg_replace('/['.$this->_escape_char.']+/', $this->_escape_char, $str);


Сделал:
Код: Выделить всё
return (!empty($item)?preg_replace('/['.$this->_escape_char.']+/', $this->_escape_char, $str):'');


оказывается уже такое сообщение на родном БТ было
http://codeigniter.com/bug_tracker/bug/bug_in_170_database_class_when_doing_random_in_order_by/,
но решил отписаться сюда :) Чего доброе дело не сделать.
maxnag
 
Сообщения: 2
Зарегистрирован: 10 дек 2008, 18:03

Вернуться в Баг-репорты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0