如何检索PDO错误消息?

时间:2012-12-03 05:05:44

标签: php mysql error-handling pdo prepared-statement

我只是将网站转换为PDO,这是我第一次接触它,但我很难从PDO获取任何有用的错误信息。我已经阅读了很多关于这个主题的其他帖子,但它们似乎都没有提供适合我的解决方案。

以下是代码:

try {
    $dbh    = new PDO("mysql:host=".CO_DB_HOST.";dbname=".CO_DB_NAME, CO_DB_UNAME, CO_DB_PWORD);

    $dbh    ->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
}
catch(PDOException $e) {
    echo $e->getMessage();
}


function addRec($data) {

    global $part_id, $dbh;
    $part_id++;

    try {
        $sth=$dbh->prepare("
            INSERT INTO 
                non_existent_table
                (
                    name
                ) VALUES (
                    ?
                );
        ");

        for ($i = 0; $i < count($data); $i++) {
            $sth->execute($data[$i]);
        }
    }

    catch(PDOException $e) {
        echo "Something went wrong. Please report this error.";
        file_put_contents('/PDOErrors.txt', PDOStatement::errorInfo(), FILE_APPEND);
    }
}

// Insert a database record
$data = array(
        array(
            'joe blogs',    /* name */
        )
);
addRec($data);

该表不存在,但我在PDOError.txt中没有出错,在httpd错误日志中没有任何错误。有人可以解释一下我做错了吗?感谢。

1 个答案:

答案 0 :(得分:2)

errorInfo() 是静态方法。此外,它返回一个数组,而不是一个字符串。

你应该对异常中的信息没问题。使用类似的东西

file_put_contents('/PDOErrors.txt', $e->getMessage(), FILE_APPEND);

如需了解更多信息,您还可以附加stacktrace

修改

您确定/PDOErrors.txt是错误日志的正确文件路径吗?那是在文件系统根目录中,我怀疑你想要什么,甚至可能。