Отладка пользовательских запросов к базе данных

8

Есть ли удобный способ попросить конкретный объект базы данных напечатать свой запрос?

Время от времени я пишу DBTNG db_op () в модуле, и часто я не совсем правильно выполняю запросы.

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

я хочу сделать

$result = db_select('node', 'n')->fields('n')->execute();
dpm($result->queryWithParameters);
dpm($result->finalQuery);
Letharion
источник

Ответы:

13

В dpq()модуле devel есть функция, которая, кажется, удовлетворяет эту потребность.

Вывести строку SQL из объекта запроса DBTNG. Включает цитируемые аргументы.

lslinnet
источник
5
Я бы дал +100, если бы мог, никогда раньше не видел эту функцию
Клайв
3
Вы могли бы иметь, если бы вы предложили награду. ;)
kiamlaluno
2

Я знаю, что это старый вопрос, но, надеюсь, этот ответ может быть полезен для других людей: в основном ядро ​​Drupal имеет свой собственный класс DatabaseLog . Вы можете использовать его в тех случаях, когда у вас нет доступного модуля Devel (как, например, производственная отладка медленных запросов?):

Database::startLog('my_custom_key');
// do some SQL operations here...
// print the queries
print_r(Database::getLog('my_custom_key'));
andreiashu
источник