我从模型中获取了以下代码
...
$select = $this->_db->select()
->from($this->_name)
->where('shipping=?',$type)
->where('customer_id=?',$userid);
echo $select; exit; // which gives exact mysql query.
.....
当我在zend中使用更新查询时,
$up_value = array('billing'=> '0');
$this->update($up_value,'customer_id ='.$userid.' and address_id <> '.$data['address_Id']);
这里我想知道确切的mysql查询。有没有办法在zend中打印mysql查询?善意的建议
答案 0 :(得分:116)
Select对象在Zend Framework中有一个__toString()方法。
来自Zend Framework手册:
$select = $db->select()
->from('products');
$sql = $select->__toString();
echo "$sql\n";
// The output is the string:
// SELECT * FROM "products"
另一种解决方案是使用Zend_Db_Profiler。 即。
$db->getProfiler()->setEnabled(true);
// your code
$this->update($up_value,'customer_id ='.$userid.' and address_id <> '.$data['address_Id']);
Zend_Debug::dump($db->getProfiler()->getLastQueryProfile()->getQuery());
Zend_Debug::dump($db->getProfiler()->getLastQueryProfile()->getQueryParams());
$db->getProfiler()->setEnabled(false);
答案 1 :(得分:22)
来自&gt; = 2.1.4
echo $select->getSqlString()
答案 2 :(得分:14)
我已遍历了数百页,谷歌搜索了很多,但我还没有找到任何确切的解决方案。 最后这对我有用。无论您在控制器或型号中的哪个位置。这段代码适用于我的每一个地方。只需使用此
//Before executing your query
$db = Zend_Db_Table_Abstract::getDefaultAdapter();
$db->getProfiler()->setEnabled(true);
$profiler = $db->getProfiler();
// Execute your any of database query here like select, update, insert
//The code below must be after query execution
$query = $profiler->getLastQueryProfile();
$params = $query->getQueryParams();
$querystr = $query->getQuery();
foreach ($params as $par) {
$querystr = preg_replace('/\\?/', "'" . $par . "'", $querystr, 1);
}
echo $querystr;
最后这件事对我有用。
答案 3 :(得分:6)
您可以使用Zend_Debug::Dump($select->assemble());
来获取SQL查询。
或者您可以启用Zend DB FirePHP profiler,它会在Firebug中以简洁的格式提供所有查询(甚至是UPDATE语句)。
修改强>: 使用FirePHP进行性能分析也适用于FF6.0 +(不仅仅是在链接中建议的FF3.0中)
答案 4 :(得分:3)
答案 5 :(得分:2)
你可以打印..
print_r($select->assemble());
答案 6 :(得分:1)
$statement = $this->sql->getSqlStringForSqlObject( HERE GOES Zend\Db\Sql\SelectSQL object );
echo "SQL statement: $statement";
示例:
$select = $this->sql->select();
...
$select->from(array( 'u' => 'users' ));
$select->join(...
$select->group('u.id');
...
$statement = $this->sql->getSqlStringForSqlObject($select);
echo $statement;
答案 7 :(得分:0)
使用: -
echo $select->query();
或
Zend_Debug::dump($select->query();
答案 8 :(得分:0)
查看Zend_Db_Profiler。这允许您在准备和执行时记录任何SQL语句。它适用于UPDATE语句以及SELECT查询。
答案 9 :(得分:0)
我这样做了
$sql = new Sql($this->adapter);
$select = $sql->select();
$select->from('mock_paper');
$select->columns(array(
'is_section'
));
$select->where(array('exam_id = ?' => $exam_id,'level_id = ?' => $level_id))->limit(1);
$sqlstring = $sql->buildSqlString($select);
echo $sqlstring;
die();
答案 10 :(得分:0)
更短:
echo $select->__toString()."\n";
和更多更短:
echo $select .""; die;
答案 11 :(得分: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代替的占位符的查询。剖析器看不到。
答案 12 :(得分:-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);
答案 13 :(得分:-1)
此人来自Zend Framework documentation(即UPDATE):
echo $update->getSqlString();
(奖金)我在自己的模型文件中使用了这个:
echo $this->tableGateway->getSql()->getSqlstringForSqlObject($select);
祝你有美好的一天:)