Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara menangkap kode dan Pesan Kesalahan MySQL menggunakan Laravel 5.2?

Laravel menggunakan PDO, jadi Anda dapat menggunakan errorInfo variabel yang mengembalikan kesalahan SQLSTATE dan pesannya. Pada dasarnya, Anda perlu menggunakan $e->errorInfo;

Jika Anda ingin mencatat semua kesalahan SQL ke dalam database, Anda dapat menggunakan Exception Handler (app/Exceptions/Handler.php dan dengarkan QueryExceptions . Sesuatu seperti ini:

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

Kemudian Anda dapat menggunakan sesuatu seperti ini:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL dua kolom stempel waktu default SEKARANG nilai ERROR 1067

  2. Bagaimana mengatasi tidak ada kesalahan GROUP BY dalam permintaan mysql

  3. MySQL concat() untuk membuat nama kolom yang akan digunakan dalam kueri?

  4. Entri duplikat ke mySQL menggunakan jQuery ajax dan PHP

  5. MySQL min/maks untuk tipe GANDA