Maison  >  Article  >  base de données  >  larval comment détecter les erreurs MySQL

larval comment détecter les erreurs MySQL

藏色散人
藏色散人original
2020-11-06 10:01:502294parcourir

Méthode de Larval pour capturer les erreurs MySQL : 1. Utilisez la variable errorInfo pour renvoyer les erreurs et les messages SQLSTATE ; 2. Utilisez le gestionnaire d'exceptions "app/Exceptions/Handler.php et écoutez les QueryExceptions" pour enregistrer toutes les erreurs SQL. aux données.

larval comment détecter les erreurs MySQL

Recommandé : "Tutoriel vidéo MySQL"

Laravel utilise PDO, vous pouvez donc utiliser la variable errorInfo pour renvoyer Erreurs et actualités SQLSTATE. Fondamentalement, vous devez utiliser $e->errorInfo;

Si vous souhaitez enregistrer toutes les erreurs SQL dans la base de données, vous pouvez utiliser un gestionnaire d'exceptions (app/Exceptions/Handler.php et écouter les QueryExceptions. Comme ceci de :

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

Ensuite, vous pouvez utiliser quelque chose comme ceci :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn