提取PDO错误消息

时间:2013-12-22 20:13:47

标签: php mysql pdo

我尝试在PDO中的连接上收到错误消息,但它返回 SQLSTATE[HY000] [1045] Access denied for user 'aa'@'localhost' (using password: YES)。以及代码和SQLSTATE部分。有没有办法只获得Access denied for user 'aa'@'localhost' (using password: YES)部分?

如何在[1045]之后提取部分,以便我只能打印错误部分或错误?我正在使用:

try {
    $conn = new PDO('mysql:host='.$host.';dbname='.$dbname, $username, $password);
    $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );

} catch(PDOException $e) {
    var_dump($e->getMessage());

}

谢谢大家,我找到了答案

2 个答案:

答案 0 :(得分:2)

使用errorinfo 试试:

$errorInfo= $db->errorInfo();
$msg= $errorInfo[2];

PDO :: errorInfo()返回有关此数据库句柄执行的上一个操作的错误信息数组。该数组包含以下字段:

元素信息 0 SQLSTATE错误代码(ANSI SQL标准中定义的五个字符的字母数字标识符)。 1特定于驱动程序的错误代码。 2特定于驱动程序的错误消息。

来源:

http://www.php.net/manual/en/pdo.errorinfo.php

答案 1 :(得分:0)

我找到了答案

try {
    $conn = new PDO('mysql:host='.$host.';dbname='.$dbname, $username, $password);
    $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );

} catch(PDOException $e) {
    if(strstr($e->getMessage(), 'SQLSTATE[')) {
            preg_match('/SQLSTATE\[(\w+)\] \[(\w+)\] (.*)/', $e->getMessage(), $matches);
           var_dump($matches);
        }

http://www.php.net/manual/en/class.pdoexception.php#97908