我最近将所有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
方法是否有效,如果没有,则输出错误。在这种情况下,应该有拼写错误。通常,当我这样做时,我从未发现任何错误,必须始终使用上述方法输出错误。这是处理此类错误的可靠和适当的方法吗?
答案 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();
}