Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在Magento中打印所有查询?_Php_Mysql_Magento_Debugging - Fatal编程技术网

Php 如何在Magento中打印所有查询?

Php 如何在Magento中打印所有查询?,php,mysql,magento,debugging,Php,Mysql,Magento,Debugging,是否可以在Magento中显示所有查询字符串?我真的很想看看执行了哪些查询 谢谢根据您的活动,查询会有很大的不同。如果您可以控制MySQL服务器,请尝试打开查询日志记录: set global general_log = on 然后可以获取SQL日志以查看查询。作为一句话或警告,Magento倾向于在每次页面加载时执行数十个查询,并在保存对象时执行数百个查询 谢谢, Joe我不能100%确定这会捕获每个查询,但大多数都是通过查询方法Zend\u Db\u Adapter\u Abstractq

是否可以在Magento中显示所有查询字符串?我真的很想看看执行了哪些查询


谢谢

根据您的活动,查询会有很大的不同。如果您可以控制MySQL服务器,请尝试打开查询日志记录:

set global general_log = on
然后可以获取SQL日志以查看查询。作为一句话或警告,Magento倾向于在每次页面加载时执行数十个查询,并在保存对象时执行数百个查询

谢谢,
Joe

我不能100%确定这会捕获每个查询,但大多数都是通过查询方法
Zend\u Db\u Adapter\u Abstract
query
运行的

lib/Zend/Db/Adapter/Abstract.php
考虑到这一点,您可以临时添加一些调试语句(为了安全起见,可以在
app/code/local/Mage
中复制)

公共函数查询($sql,$bind=array())
{
//如果需要,连接到数据库
$this->_connect();
//$sql是Zend\u Db\u Select对象吗?
if($sql instanceof Zend\u Db\u Select){
if(空($bind)){
$bind=$sql->getBind();
}
$sql=$sql->assemble();
}
回显“{$sql}\n
\n”; var_dump($bind);

如果您需要捕获所有这些内容,最好在MySQL级别执行此操作(这并不总是可能的,取决于您的主机/IT情况)

在Varien_Db_Adapter_Pdo_MySQL中

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

并(如果还没有)创建中定义的文件夹

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

授予读/写权限

使用local.xml中的以下节点激活Zend SQL Profiler

$collection->printLogQuery(true);
<resources>
 <default_setup>
  <connection>
   <profiler>1</profiler>
要简单地输出所有查询,请执行以下操作:

print_r($profiler->getQueryProfiles());
您可以在<代码>索引.php < /代码>的末尾添加这两行,以查看每页底部的所有查询。请注意,这会破坏返回JSON响应的Ajax请求,因此您可以考虑用这些代码来记录查询而不是打印它们(再次在“代码>索引> PHP <代码>添加”):

然后您将在
var/log/querys.log


完成调试后,不要忘记再次删除这些行!

打开MySQL日志记录将确保记录所有查询事务。以下是打开日志记录的方法。要打开日志记录以记录到文件,请将以下内容放入my.cnf文件或my.ini文件(如果在windows上),然后重新启动MySQL

log = /path/to/your/logfile.log
然后,如果要登录到表mysql.general\u log,请运行以下查询:

SET GLOBAL log_output = 'TABLE';
SET GLOBAL general_log = 'ON';
如果要登录到该文件,请运行以下命令:

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

不幸的是,这不会记录所有的查询,因为类及其query()方法不是无处不在。如何调用此函数?Zend_Db_Select对象何时可用?什么是绑定?
$profiler = Mage::getSingleton('core/resource')->getConnection('core_write')->getProfiler();
Mage::log(print_r($profiler->getQueryProfiles(), true), null, 'queries.log', true);
log = /path/to/your/logfile.log
SET GLOBAL log_output = 'TABLE';
SET GLOBAL general_log = 'ON';
SET GLOBAL log_output = "FILE"; 
SET GLOBAL general_log = 'ON';