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

Php MySQL查询失败时PDO中的错误处理,php,pdo,error-handling,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()) {

我最近把我所有的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方法是否工作,如果不工作,则检查输出错误。在这种情况下,应该是因为有拼写错误。通常,当我这样做时,我从未看到任何错误出现,并且必须始终使用上述方法来输出错误。这是处理此类错误的可靠且适当的方法吗?

不,不是

就像几乎所有的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();
}

我自己更喜欢例外情况,在生产过程中不应该有这些打字错误,只有在开发过程中。但是:你可以在PDO对象上调用a来改变它处理错误的方式。你已经看完了吗?@MichaelBerkowski,嗯,这是一个很好的开始。谢谢检查一下这个,这是一个非常好的PDO教程:是的,就像其他用户提到的setAttribute一样。我已经研究过了,它比if和else语句以及其他无用的东西简单得多。请原谅我的PHP,我通常不怎么处理PHP。