0

我只是将一个站点转换为 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 错误日志中也没有任何错误。有人可以阐明我做错了什么吗?谢谢。

4

1 回答 1

2

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

您应该对异常中的信息感到满意。改用这样的东西

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

有关更多信息,您还可以附加stacktrace

编辑

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

于 2012-12-03T05:11:14.100 回答