Как распечатать все запросы в Magento?

Можно ли отобразить все строки запроса в Magento? Мне очень нравится видеть, какие запросы выполняются.

благодаря

Я не уверен на 100%, что это поймает каждый запрос, но большинство из них выполняет метод query Zend_Db_Adapter_Abstract в

 lib/Zend/Db/Adapter/Abstract.php 

Имея это в виду, вы можете временно добавить некоторые отладочные заявления (к копии, которую вы делаете в app/code/local/Mage чтобы быть в безопасности)

 public function query($sql, $bind = array()) { // connect to the database if needed $this->_connect(); // is the $sql a Zend_Db_Select object? if ($sql instanceof Zend_Db_Select) { if (empty($bind)) { $bind = $sql->getBind(); } $sql = $sql->assemble(); } echo "{$sql}\n<br />\n"; var_dump($bind); 

Если вам нужно их поймать, вам будет лучше делать это на уровне MySQL (что не всегда возможно в зависимости от вашей ситуации с хостом / ИТ)

В Varien_Db_Adapter_Pdo_Mysql

 Magento 1.4 : lib/varien/Db/Adapter/Pdo/Mysql.php 

задавать

 protected $_debug = true; protected $_logAllQueries = true; 

и (если и не существует) создать папку, определенную в

 protected $_debugFile = 'var/debug/sql.txt'; 

Дайте разрешение на чтение / запись

Активируйте Zend SQL Profiler со следующим узлом в local.xml

 <resources> <default_setup> <connection> <profiler>1</profiler> 

Затем вы можете получить доступ к профилировщику где-нибудь в своем коде и получить много информации обо всех выполненных запросах:

 $profiler = Mage::getSingleton('core/resource')->getConnection('core_write')->getProfiler(); 

Чтобы просто вывести все запросы:

 print_r($profiler->getQueryProfiles()); 

Вы можете добавить эти две строки в конец index.php чтобы просмотреть все запросы внизу каждой страницы. Имейте в виду, что это нарушит запросы AJAX, которые возвращают ответ JSON, поэтому вы можете рассмотреть возможность ведения журнала запросов вместо их печати с помощью этого кода (опять же, добавьте его в конец index.php ):

 $profiler = Mage::getSingleton('core/resource')->getConnection('core_write')->getProfiler(); Mage::log(print_r($profiler->getQueryProfiles(), true), null, 'queries.log', true); 

Затем вы найдете все запросы в var/log/queries.log

Не забудьте удалить строки после завершения отладки!

Запросы будут значительно различаться в зависимости от ваших действий. Если у вас есть некоторый контроль над вашим сервером MySQL, попробуйте включить ведение журнала запросов:

 set global general_log = on 

Затем вы можете получить журнал SQL для просмотра запросов. В качестве слова или предупреждения Magento имеет тенденцию выполнять десятки запросов при каждой загрузке страницы и сотни для сохранения объекта.

Спасибо, Джо

 $collection->printLogQuery(true); 

Включите ведение журнала MySQL, убедитесь, что все транзакции запросов регистрируются. Вот как вы можете включить ведение журнала. Чтобы включить журнал, войдите в файл. Поместите следующее в файл my.cnf или my.ini, если в Windows, и перезапустите MySQL.

 log = /path/to/your/logfile.log 

Затем, если вы хотите войти в таблицу mysql.general_log , запустите эти запросы:

 SET GLOBAL log_output = 'TABLE'; SET GLOBAL general_log = 'ON'; 

Запустите их, если вы хотите войти в файл:

 SET GLOBAL log_output = "FILE"; SET GLOBAL general_log = 'ON';