如何在zend框架中打印精确的SQL查询?

mym*_*and 69 php mysql zend-framework zend-db

我有以下一段代码,我从模型中取出,

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

当我在zend中使用更新查询时,

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

在这里,我想知道确切的mysql查询.有没有办法在zend中打印mysql查询?好心劝告

Mar*_*yor 121

选择对象在Zend Framework中有一个__toString()方法.

来自Zend Framework手册:

$select = $db->select()
             ->from('products');

$sql = $select->__toString();
echo "$sql\n";

// The output is the string:
//   SELECT * FROM "products"
Run Code Online (Sandbox Code Playgroud)

另一种解决方案是使用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);
Run Code Online (Sandbox Code Playgroud)

http://framework.zend.com/manual/en/zend.db.select.html


Whi*_*her 23

从> = 2.1.4

echo $select->getSqlString()
Run Code Online (Sandbox Code Playgroud)


Raj*_*wal 15

我已遍历了数百页,谷歌搜索了很多,但我还没有找到任何确切的解决方案.最后这对我有用.无论您在控制器或型号中的哪个位置.这段代码适用于我的每一个地方.只需使用它

//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;
Run Code Online (Sandbox Code Playgroud)

最后这件事对我有用.


Chr*_*n P 6

您可以使用它Zend_Debug::Dump($select->assemble());来获取SQL查询.

或者您可以启用Zend DB FirePHP分析器,它将以Firebug中的整齐格式(甚至UPDATE语句)为您提供所有查询.

编辑:使用FirePHP进行性能分析也适用于FF6.0 +(不仅仅是在链接中建议的FF3.0中)