Heim  >  Artikel  >  Datenbank  >  Larval, wie man MySQL-Fehler abfängt

Larval, wie man MySQL-Fehler abfängt

藏色散人
藏色散人Original
2020-11-06 10:01:502292Durchsuche

larvals Methode zum Erfassen von MySQL-Fehlern: 1. Verwenden Sie die Variable „errorInfo“, um SQLSTATE-Fehler und -Meldungen zurückzugeben. 2. Verwenden Sie den Ausnahmehandler „app/Exceptions/Handler.php und warten Sie auf QueryExceptions“, um alle SQL-Fehler in den Daten zu protokollieren.

Larval, wie man MySQL-Fehler abfängt

Empfohlen: „MySQL-Video-Tutorial

Laravel verwendet PDO, sodass Sie die Variable errorInfo verwenden können, um SQLSTATE-Fehler und -Meldungen zurückzugeben. Grundsätzlich müssen Sie $e->errorInfo;

verwenden. Wenn Sie alle SQL-Fehler in der Datenbank protokollieren möchten, können Sie einen Ausnahmehandler (app/Exceptions/Handler.php) verwenden und auf QueryExceptions warten. So:

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);
}

Dann können Sie so etwas verwenden:

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..
    // ....
}

Das obige ist der detaillierte Inhalt vonLarval, wie man MySQL-Fehler abfängt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn