如何在Zend框架中打印确切的SQL查询?
我有我从模型采取以下代码片段,
... $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查询? 友善的build议
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"
另一种解决scheme是使用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);
从> = 2.1.4
echo $select->getSqlString()
我已经遍历了数百页,search了很多,但我还没有find任何确切的解决scheme。 最后这为我工作。 不pipe你在哪里控制器或模型。 这个代码为我工作在每一个地方。 只要使用这个
//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;
最后这件事情为我工作。
你可以使用Zend_Debug::Dump($select->assemble());
获取SQL查询。
或者,您可以启用Zend DB FirePHP分析器 ,它将在Firebug(即使是UPDATE语句)中以一种整齐的格式得到所有查询。
编辑 :用FirePHP分析也适用于FF6.0 +(不仅在链接中build议FF3.0)
你可以打印..
print_r($select->assemble());
现在在Zend2上:
$select->getSqlString();
显示ZendDbSql对象生成的SQL
用这个:-
echo $select->query();
要么
Zend_Debug::dump($select->query();
查看Zend_Db_Profiler 。 这允许您在准备和执行任何SQL语句时logging日志。 它适用于UPDATE语句以及SELECT查询。
$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;
我这样做了
$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();
甚至更短:
echo $select->__toString()."\n";
更短:
echo $select .""; die;
$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);