我们使用Doctrine,一个PHP ORM。我创建了一个这样的查询:
$q = Doctrine_Query::create()->select('id')->from('MyTable');
然后在函数中,我添加了各种where子句和适当的东西,像这样
$q->where('normalisedname = ? OR name = ?', array($string, $originalString));
稍后,在execute()-ing该查询对象之前,我想打印出原始SQL以检查它,并这样做:
$q->getSQLQuery();
但是,这只打印准备好的语句,而不是完整的查询。我想看看它正在发送什么到MySQL,但相反,它正在打印一个准备好的语句,包括?是否有一些方法可以看到'full'查询?
您可以使用以下方法轻松地访问SQL参数。
$result = $qb->getQuery()->getSQL();
$param_values = '';
$col_names = '';
foreach ($result->getParameters() as $index => $param){
$param_values .= $param->getValue().',';
$col_names .= $param->getName().',';
}
//echo rtrim($param_values,',');
//echo rtrim($col_names,',');
因此,如果输出$param_values和$col_names,就可以获得通过sql和相应列名传递的参数值。
注意:如果$param返回一个数组,你需要重新迭代,因为IN(:?)中的参数通常是一个嵌套数组。
同时,如果你找到了其他方法,请与我们分享:)
谢谢你!
你可以检查你的应用执行的查询,如果你把所有的查询都记录在mysql中:
http://dev.mysql.com/doc/refman/5.1/en/query-log.html
会有更多的查询,不仅是一个你正在寻找,但你可以grep它。
->getSql();作品
编辑:
查看我使用的所有mysql查询
sudo vim /etc/mysql/my.cnf
加上这两行:
general_log = on
general_log_file = /tmp/mysql.log
重新启动mysql
编辑2
如果你没有找到mysql的配置(它可以在很多地方),只需从mysql命令行设置这些变量。
mysql -u root -p
SHOW VARIABLES LIKE 'general_log_file';
SHOW VARIABLES LIKE 'general_log';
SET GLOBAL general_log = 'on';
SET GLOBAL general_log_file = '/tmp/mysql.log';
//view the queries
sudo tail -f /tmp/mysql.log
这些设置的生命周期直到MySQL重新启动。或者是笔记本电脑。所以他们不是永久的-这在我看来是伟大的-我只需要他们当我调试时,我不需要担心编辑配置然后删除他们。如果您不删除日志记录,如果您忘记它,它可能会增长太多。