larval mysqlエラーをキャッチする方法

藏色散人
リリース: 2020-11-06 17:42:08
オリジナル
2309 人が閲覧しました

mysql エラーをキャプチャする larval メソッド: 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 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート