如何在 Zend Framework 中打印精确的 SQL 查询?

78

我有以下代码,是从模型中获取的:

    ...
                  $select = $this->_db->select()
                    ->from($this->_name)
                    ->where('shipping=?',$type)
                    ->where('customer_id=?',$userid);
                 echo  $select; exit; // which gives exact mysql query.
            .....

当我在Zend中使用update查询时,

$up_value = array('billing'=> '0');
$this->update($up_value,'customer_id ='.$userid.' and address_id <> '.$data['address_Id']);      

这里我想知道确切的MySQL查询语句。有没有可能在Zend中打印出MySQL查询语句?请给予指导。

14个回答

0

如果您使用占位符,从分析器或查询对象返回的查询将具有占位符。

要查看 MySQL 运行的确切查询,可以使用常规查询日志。

这将列出自启用以来运行的所有查询。 收集样本后不要忘记禁用此功能。 在活动服务器上,此日志可能会非常快速地填满。

从 mysql 终端或类似 MySQL Workbench 的查询工具中运行:

SET GLOBAL log_output = 'table';
SET GLOBAL general_log = 1;

然后运行您的查询。 结果将存储在“mysql.general_log”表中。

SELECT * FROM mysql.general_log

禁用查询日志:

SET GLOBAL general_log = 0;

检查是否已关闭:

SHOW VARIABLES LIKE 'general%';

这帮助我找到了一个查询,其中占位符没有被Zend DB替换。使用分析器无法看到。


0
使用这个:-
echo $select->query();

或者

Zend_Debug::dump($select->query();

谢谢vascowhite。但我需要知道更新MySQL查询格式,而不是选择查询格式。如何打印这个"$this->update...."? - mymotherland
我认为 SQL 并没有被存储在任何地方,而是被生成和执行。 - vascowhite
谢谢,但是只有第二种方法 Zend_Debug::dump($select->query()); 生效了。 - Pratik Joshi

0

查看Zend_Db_Profiler。这可以让您记录任何SQL语句的准备和执行过程。它适用于UPDATE语句以及SELECT查询。


-1
$db->getProfiler()->setEnabled(true);

// your code    
$this->update('table', $data, $where);    
Zend_Debug::dump($db->getProfiler()->getLastQueryProfile()->getQuery());    
Zend_Debug::dump($db->getProfiler()->getLastQueryProfile()->getQueryParams());    
$db->getProfiler()->setEnabled(false);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接