Можно ли отобразить все строки запроса в 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';