Heim >Datenbank >MySQL-Tutorial >Larval, wie man MySQL-Fehler abfängt
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.
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!