2010-12-14 65 views
2

與MySQL包裝PDO我怎麼返回執行的查詢

function query($msql) 
{ 
    $this->last_connection =& $this->connection; 
    $this->msql =& $msql; 
    $queryult = mysql_query($msql, $this->connection); 
    if ($queryult) { 
     $this->queries_count++; 
     return $queryult; 
    } else { 
     $this->display_errors(); 
     return false; 
    } 
} 

function num_queries() 
{ 
    return @$this->queries_count; 
} 

隨着PDO如何得到執行的查詢總數的總數。

+1

您是否正在計算在單個請求/進程中執行的查詢?如果有一些選項可以構建到對象中以創建此類計數。 – DeaconDesperado 2010-12-14 21:36:40

回答

0

如果您要在單個進程/請求中計算查詢,並且需要知道執行單個任務時執行了多少次執行,那麼可以使用_construct和_destruct magic函數將此功能直接構建到數據庫對象中if你在php 5.3上。由於用於查詢對象的現有功能會增加此計數,因此可以將其保存。

編寫_destruct函數,該函數將保存查詢函數向下迭代到系統上的日誌文件或數據庫中預定位置的次數。這會將queries_count屬性的值保存到可以使用它的位置。

function _destruct(){ 
//write a log file with the value or a serialized version of the database object itself 
//set the mode to w+ so it truncates every request 
$fh = fopen('/path/to/a/new/log' 'w+'); 
fwrite($fh, $this->queries_count); 
fclose($fh); 
} 

這會在每次數據庫對象被GC調用時運行。然後,您可以編寫一個靜態方法來打開文件並讀取該值。

public static function getLastQueriesCount(){ 
    $fh = fopen('/path/to/a/new/log' 'r+'); 
    $count = fgets($fh); 
    fclose($fh); 
    return $count; 
} 

您當然需要爲該文件/目錄正確設置寫權限。無論你喜歡什麼,你都可以用函數體來存儲計數 - 無論是平面文件格式還是數據庫。

1

PDO不計算查詢。你必須自己實現它,例如與PDO類的自定義擴展。