在使用 CakePHP 框架開發應用程式時,除錯資料庫查詢是常見需求。掌握如何印出執行的 SQL 語句,能幫助開發者快速定位效能瓶頸、驗證查詢邏輯,並優化資料庫操作。本文將介紹一種簡單有效的方法,讓你在程式碼中輕鬆獲取所有已執行的 SQL 語句。
將以下程式碼片段放入你需要除錯的位置(例如 Controller 的動作方法中、View 檔案,或是元件的回呼函式),即可印出該時間點之前所有資料庫連線所執行的 SQL 語句:
$sources = ConnectionManager::sourceList();
if (!isset($logs)) {
$logs = array();
foreach ($sources as $source) {
$db =& ConnectionManager::getDataSource($source);
if (!$db->isInterfaceSupported('getLog')) {
continue;
}
$logs[$source] = $db->getLog();
}
}
// 印出或記錄 $logs 內容
debug($logs);
為避免汙染正式環境日誌,建議搭配環境判斷使用:
if (Configure::read('debug') > 0) {
// 僅在除錯模式下執行上述程式碼
$sources = ConnectionManager::sourceList();
// ... 其餘邏輯
// 可寫入自訂日誌檔或直接 debug()
CakeLog::write('sql_debug', print_r($logs, true));
}
ConnectionManager::get() 並呼叫 getLog()。DebugKit 外掛使用可獲得更豐富的視覺化查詢分析介面。掌握這項技巧,能讓你在 CakePHP 專案開發中更從容地應對資料庫相關問題,提升除錯效率。