sql >> データベース >  >> RDS >> Mysql

Laravel 5.2を使用して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..
        // ....
    }
    



    1. MySQLでレコード更新の履歴を保持する方法は?

    2. SQLServerのLIKE論理演算子とは-SQLServer/TSQLチュートリアルパート123

    3. 他のテーブルに存在しない行を選択します

    4. すべてのフィールドを検索するためのMYSQLクエリ?