Laravel 4 - 获取原始SQL错误消息

时间:2013-09-18 12:50:24

标签: postgresql laravel

我正在使用Laravel 4和Postgres。

如果我在PGAdmin中运行以下语句

SELEC * FROM tables

我收到以下错误消息

ERROR:  syntax error at or near "selec"
LINE 1: selec * from tables
        ^


********** Error **********

ERROR: syntax error at or near "selec"
SQL state: 42601
Character: 1

现在我在Laravel 4中运行以下查询

DB::select("SELEC * FROM tables");

我收到了很多其他错误信息。

是否有可能以某种方式实际获取原始的Postgres错误消息?

2 个答案:

答案 0 :(得分:1)

如何使用pg_result_error()或甚至pg_last_error()

$query = DB::select('...');

if($query) {
    //do something
} else {
    return pg_result_error($query);
}

答案 1 :(得分:0)

进入php artisan tinker你可以这样做:

try {
    // ...  your code here .. //
} catch ( \Exception $objException ) {
    $arrTrace = $objException->getTrace();
    $query = $arrTrace[0]['args'][0];
    $bindings = $arrTrace[0]['args'][1];
    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'";
        }
        else if (is_bool($binding)) {
            $bindings[$i] = $binding ? 'true' : 'false';   
        }
        else if ( $binding === null ) {
            $bindings[$i] = 'NULL';
        }
    }

    // Insert bindings into query
    $query = str_replace(array('%', '?'), array('%%', '%s'), $query);
    $query = trim( vsprintf($query, $bindings) ) . "\n";

    print $query;

}