MySQL查询失败时处理PDO中的错误

时间:2013-12-10 20:01:59

标签: php pdo error-handling

我最近将所有mysql.*都更改为PDO。我一直有一些问题,并试图习惯它。

我的问题是如何在sql语句中出现问题时正确调用错误。通常我不会使用try, catch但是还有另一种选择吗? 假设我有以下内容:

private function init()
{
    $query = $this->_PDO->prepare("SELECT * FROM here WHR name='john'");
    if($query->execute())
    {
        $this->_sql_rows = $query->rowCount();
    }
    else
    {
        print_r($query->errorInfo());
    }

}

检查execute方法是否有效,如果没有,则输出错误。在这种情况下,应该有拼写错误。通常,当我这样做时,我从未发现任何错误,必须始终使用上述方法输出错误。这是处理此类错误的可靠和适当的方法吗?

1 个答案:

答案 0 :(得分:0)

不,不是。

就像几乎每个PHP用户一样,你对错误处理有一个非常模糊和不确定的想法。代码大多看起来像沙箱示例中的虚拟代码。说到你目前的方法,坦率地说 - 这太可怕了。在现场网站上,它只会吓到一个无辜的用户,而网站管理员则不知道发生了什么。

因此,首先,您必须明白您正在寻找的错误处理。

有不同的可能方案,但最方便的是遵循PHP处理所有其他错误的方式。为此,只需在异常模式下设置PDO即可。这样,您将始终收到所有发生错误的通知。所以 - 只需在连接后添加此行。

$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

因此你的功能变得简短而干净

private function checkUser($user)
{
    $stmt = $this->_PDO->prepare("SELECT 1 FROM users WHERE name=?");
    $stmt->execute(array($user));
    return $stmt->fetchColumn();
}