>데이터 베이스 >MySQL 튜토리얼 >애벌레 mysql 오류를 잡는 방법

애벌레 mysql 오류를 잡는 방법

藏色散人
藏色散人원래의
2020-11-06 10:01:502337검색

larval의 mysql 오류 캡처 방법: 1. errorInfo 변수를 사용하여 SQLSTATE 오류 및 메시지를 반환합니다. 2. 예외 처리기 "app/Exceptions/Handler.php 및 수신 대기"를 사용하여 모든 SQL 오류를 데이터에 기록합니다.

애벌레 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..
    // ....
}

위 내용은 애벌레 mysql 오류를 잡는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.