2011-02-04 134 views
1

我經常面臨以下情況;我正在開發一個以PHP爲基礎的現有系統,它實際上是相當多的,它通常由許多代碼組成。現在我必須擴展一些功能,調試一些東西,並且需要知道系統如何與MySQL-DB交互。哪些請求按什麼順序執行。如何攔截DB請求? (MySQL)

如何截取所有查詢?對於數據庫來說就像xdebug_start_trace。

編輯:沒有DB請求的集中處理。你可以在那裏找到各種請求。所以我的問題是針對一些日誌功能。基本上這應該存在,因爲像這樣的東西可能是有用的常識。

編輯2:馬里奧建議的解決方案,這取決於重新啓動mysql-deamon ...不能做。更多建議?

+0

是否有一個類可以處理所有的MySQL數據庫連接? – 2011-02-04 13:19:15

+0

我懷疑它可以使用原始API函數在遺留代碼上完成。 – 2011-02-04 13:25:43

+0

如果現有代碼直接使用mysql_query(),則最後一個選項將嘗試runkit_function_rename()並定義攔截所有調用的包裝函數。或者更糟糕的選擇:通過netcat | tee | netcat運行套接字或使用網絡嗅探器。 – mario 2011-02-04 13:27:46

回答

1

如果您正在瀏覽PDO,可以將其擴展爲記錄或回顯查詢字符串。

<?php 
class PDODebug extends PDO 
{ 
    public function exec ($statement) 
    { 
     var_dump ($statement); // Or log to a file or use firePHP to log to the console 
     return (parent::exec ($statement)); 
    } 
    public function query ($statement) 
    { 
     var_dump ($statement); // Or log to a file or use firePHP to log to the console 
     return (parent::query ($statement)); 
    } 
} 
?> 

現在,在你的代碼中創建一個新的PDODebug,你將創建通過便記錄進行PDO和查詢。如果你使用的是不同的OO數據庫接口(如MySQLI),你應該可以做類似的事情。

如果您使用的是非OO數據庫訪問層(如mysql_ *函數),則需要在每次使用mysql函數之前插入echo或var_dump或其他內容。