无法使用try-catch处理SQL异常

时间:2014-01-18 22:48:19

标签: php mysql sql mysqli try-catch

我正在创建相当大的导入脚本。我想看到任何有问题的(未执行的)SQL查询。我在使用try-catch PHP块捕获错误的SQL查询时遇到问题。

我有一个问题:

SELECT id FROM tag WHERE name IN ()

当然它有一个错误,所以我想用这段代码打印这样的查询:

$sql = "SELECT id FROM tag WHERE name ".$tagsSql."";

try
{
    $query = mysqli_query($this->mysqli, $sql);
    $result = $query->fetch_assoc();
}
catch(Exception $e)
{
    echo 'Problem with: '.$sql;
    print_r($e); die;
}

运行脚本时,PHP只会抛出这个:

Fatal error: Call to a member function fetch_assoc() on a non-object in C:\www\blackboard-import\index.php on line 227

为什么没有捕获此错误?因为这是致命的?我该如何处理这种情况? 我使用mysqli与MySQL联系。

1 个答案:

答案 0 :(得分:5)

这不是常规异常,而是致命错误(导致PHP关闭)。 mysqli_query()将在出错时返回false,这就是您当前脚本失败的原因,因此解决方案可能类似于以下内容

try {
    $query = $this->msqli->query($sql);
    if ($query === FALSE) {
        throw new Exception($this->mysqli->error);
    }

    $result = $query->fetch_assoc();
} catch(Exception $e) {
    //...
}