首頁 > 資料庫 > mysql教程 > larval 如何捕捉mysql錯誤

larval 如何捕捉mysql錯誤

藏色散人
發布: 2020-11-06 17:42:08
原創
2316 人瀏覽過

larval捕獲mysql錯誤的方法:1、使用errorInfo變數傳回SQLSTATE錯誤和訊息;2、使用異常處理程序「app/Exceptions/Handler.php並偵聽QueryExceptions」將所有SQL錯誤記錄到數據。

larval 如何捕捉mysql錯誤

推薦:《mysql影片教學

Laravel使用PDO,因此您可以使用errorInfo變數傳回SQLSTATE錯誤和訊息。基本上,您需要使用$e->errorInfo;

如果要將所有SQL錯誤記錄到資料庫中,可以使用異常處理程序(app/Exceptions/Handler.php並偵聽QueryExceptions。像這樣的:

public function render($request, Exception $e)
{
    switch ($e) {
        case ($e instanceof \Illuminate\Database\QueryException):
            LogTracker::saveSqlError($e);
            break;
        default:
            LogTracker::saveError($e, $e->getCode());
    }
    return parent::render($request, $e);
}
登入後複製

然後你可以用這樣的東西:

public function saveSqlError($exception)
{
    $sql = $exception->getSql();
    $bindings = $exception->getBindings()
    // Process the query's SQL and parameters and create the exact query
    foreach ($bindings as $i => $binding) {
        if ($binding instanceof \DateTime) {
            $bindings[$i] = $binding->format('\'Y-m-d H:i:s\'');
        } else {
            if (is_string($binding)) {
                $bindings[$i] = "'$binding'";
            }
        }
    }
    $query = str_replace(array('%', '?'), array('%%', '%s'), $sql);
    $query = vsprintf($query, $bindings);
    // Here's the part you need
    $errorInfo = $exception->errorInfo;
    $data = [
        'sql'        => $query,
        'message'    => isset($errorInfo[2]) ? $errorInfo[2] : '',
        'sql_state'  => $errorInfo[0],
        'error_code' => $errorInfo[1]
    ];
    // Now store the error into database, if you want..
    // ....
}
登入後複製

以上是larval 如何捕捉mysql錯誤的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板