我有一個$query基于用戶選擇動態創建的 SQL 查詢 ()(我已經對用戶輸入進行了清理,因此不存在 SQL 注入問題)。但是有時查詢會回傳 aPHP Fatal error所以我想將所有變數輸出到一個檔案中,所以進行一些挖掘。
我的代碼是:
try {
$results = $db->query($query);
} catch (Exception $e) {
$all_vars = get_defined_vars();
file_put_contents('query_problems.txt',date('Y-m-d H:i:s') . print_r($all_vars, True),FILE_APPEND);
}
但是我仍然收到錯誤
未捕獲的錯誤:在 null 上呼叫成員函式 query()
它指向的線就是我跑的地方$db->query($query)。
我究竟做錯了什么?我如何捕捉到這個錯誤?
uj5u.com熱心網友回復:
問題是您正在捕獲Exception,而不是Error(正在拋出)。如果你想同時捕獲(例外和錯誤),你應該使用Throwable。
try
{
// Code that may throw an Exception or Error.
}
catch (Throwable $t)
{
// Executed only in PHP 7, will not match in PHP 5
}
正如它在檔案中所說:
由于 Error 層次結構不繼承自 Exception,因此在 PHP 5 中使用 catch (Exception $e) { ... } 塊處理未捕獲例外的代碼會發現這些錯誤不會被這些塊捕獲。需要 catch (Error $e) { ... } 塊或 set_exception_handler() 處理程式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/439554.html
