Подтвердить что ты не робот

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

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

Спасибо

4b9b3361

Ответ 1

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

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 (что не всегда возможно в зависимости от вашей ситуации в хосте/ИТ)

Ответ 2

В 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';

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

Ответ 3

Активируйте Zend SQL Profiler со следующим node в вашем 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

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

Ответ 4

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

set global general_log = on

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

Спасибо, Джо

Ответ 5

$collection->printLogQuery(true);

Ответ 6

Включить ведение журнала 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';