簡體   English   中英

如何在zend框架中打印確切的sql查詢?

[英]How to print exact sql query in zend framework ?

我有以下代碼是我從模型中獲取的,

    ...
                  $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查詢嗎? 好心勸告

選擇對象在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);

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

從> = 2.1.4

echo $select->getSqlString()

我遍歷了數百頁,在Google上搜索了很多,但是我沒有找到任何確切的解決方案。 終於這對我有用。 無論您在控制器或模型中的位置。 這段代碼在任何地方都對我有用。 只是用這個

//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 Profiler ,它將在Firebug中以整潔的格式(甚至是UPDATE語句)為您提供所有查詢。

編輯 :使用FirePHP進行性能分析也可以在FF6.0 +中使用(不僅在FF3.0中如鏈接中所述)

現在在Zend2上:

$select->getSqlString();

顯示從ZendDbSql對象生成的SQL

你可以打印..

print_r($select->assemble());
$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;

甚至更短:

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

短:

echo  $select .""; die;

我是這樣做的

$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();

這來自Zend Framework文檔 (即UPDATE):

echo $update->getSqlString();

(獎金)我在自己的模型文件中使用了這個:

echo $this->tableGateway->getSql()->getSqlstringForSqlObject($select);

祝你今天愉快 :)

從分析器或查詢對象返回的查詢將具有占位符(如果使用的話)。

要查看由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替換占位符的查詢。 剖析器看不到它。

用這個:-

echo $select->query();

要么

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

Zend_Db_Profiler 這樣,您就可以在准備和執行任何SQL語句時記錄它。 它適用於UPDATE語句以及SELECT查詢。

$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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM