2012-12-03 36 views
0

我只是将网站转换为PDO,这是我第一次接触到它,但我很难从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的错误日志中没有错误,没有什么。请问有人可以解释我做错了吗?谢谢。

+0

检查此http://php.net/manual/en/pdostatement.errorinfo.php – Namal

回答

2

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

你应该没问题,例外的信息。使用类似的东西

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

有关其他信息,您还可以附加stacktrace

编辑

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

+0

谢谢菲尔。我以前使用getMessage(),现在已经改回它,因为它看起来是最好的选择,但是,仍然没有错误信息(除了回声)。 关于文件路径的好处,虽然我希望在我的Apache日志中得到一个错误呢?如何在不使用服务器特定的文件路径(为便于携带)的情况下指定站点根目录中的路径? 另外,请你能详细说明我如何追加你提到的'stacktrace'? –

+0

关于为什么downvote的任何想法?这是一个愚蠢的问题吗? –

+0

我想出了路径问题,并将该行更改为: file_put_contents($ _ SERVER ['DOCUMENT_ROOT']。'/ PDOErrors.txt',$ e-> getMessage(),FILE_APPEND); 但不幸的是,该文件中仍然没有错误消息,并且服务器日志中没有任何内容,例如“无法打开文件”。 –