pager_query и точка с запятой
Делаю модуль с постраничным выводом данных в виде таблицы. Данные из mysql извлекаются с помощью pager_query. И что-то у меня не хочет работать. Помучился немного, потом нашёл, что drupal оказывается отсылает следующий запрос к СУБД:
SELECT name, COUNT(*) AS c FROM m_redirect, m_stat WHERE id=rid GROUP BY id; ORDER BY name ASC LIMIT 0, 10;Виной оказалась запятая перед ORDER BY. Я привык работая в консоли mysql все запросы заканчивать точкой с запятой - иначе нельзя, не будет работать. Я знал, что в php (и в Drupal тоже) sql-запросы необязательно заканчивать точкой с запятой - будет работать так и так. Поэтому раньше я о таких вещах как-то не задумывался.
В данном случае проблема вылезла наружу. pager_query дополняет запрос, указанный в параметрах, с помощью конструкции ORDER BY .. LIMIT ... - обеспечивая отбор данных нужных именно на этой странице и их сортировку. В результате и получился запрос в середине которого вклинилась незапланированная точка с запятой. Раньше то я похоже ленился в pager_query ставить этот знак препинания, но сейчас я этот запрос скопировал прямо из консоли, в которой его отлаживал, и ошибка вылезла наружу.
В общем вывод - надо формировать новую привычку.
P.S. Интересно, есть ли в drupal какой-нибудь хук, с помощью которого можно перехватить запрос и и убрать лишнюю точку с запятой?

Комментарии:
Отправить комментарий