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

标签 php mysql sql mysqli try-catch

<分区>

我正在创建相当大的导入脚本。我想查看任何有问题的(未执行的)SQL 查询。我在使用 try-catch PHP block 捕获错误的 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。

最佳答案

这不是常规异常而是 fatal error (导致 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) {
    //...
}

关于php - 无法使用 try-catch 处理 SQL 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21210871/

相关文章:

php - 鼠标悬停在多个文本段落上的弹出窗口,使用数据库中的数据

php - 无法在 PHP 中执行 SELECT QUERY 作为 PREPARED SQL STATEMENT

php - 如果值与另一个表值匹配则更新表行

sql - 通过计数获得中位数

php - curl 错误 60 : SSL certificate: unable to get local issuer certificate

javascript - PHP 日历周期(每周)

mysql - 根据连接条件进行左连接

php - MySQL 数据库尝试更新信息但未出现在网站上

c# - 使用 Entity Framework 6 调用数据库函数

javascript - 如何从 Node.js API 正确发送响应代码