Php 如何在Magento中打印所有查询?
是否可以在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
谢谢根据您的活动,查询会有很大的不同。如果您可以控制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';