PDO测试如果连接

时间:2013-08-14 15:27:24

标签: php mysql pdo connection

我无法在任何地方找到答案。也许它非常简单

我有这样的mysql PDO连接:

try{
$DBH = new PDO("mysql:host=$db_hostname;dbname=$db_database", $db_username, $db_password);
$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );  
}
catch (PDOException $e){
echo $e->getMessage();
exit;
}

我想测试连接是否有效,即。如果密码,用户名,数据库名称和主机名拼写正确。

尝试,抛出似乎只是拾取基本错误,就像驱动程序拼写错误一样。如果说密码错误,它不会引发错误。

感谢

2 个答案:

答案 0 :(得分:13)

只需点击此问题,PDO tag wiki就会找到准确的操作方法:

$dsn = "mysql:host=localhost;dbname=test;charset=utf8";
$opt = array(
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
);
$pdo = new PDO($dsn,'root','', $opt);

以及警告

  

请勿使用try..catch 运算符来处理错误消息   未捕获的异常已经非常适用于此目的,因为它将像处理其他PHP错误一样处理PDO错误 - 因此,您可以使用站点范围的设置来定义行为。   稍后可以添加自定义异常处理程序,但不是必需的。特别是对于新用户,建议使用未处理的异常,因为它们提供的信息非常丰富,有用且安全。   更多信息......

答案 1 :(得分:3)

我使用以下代码进行连接:

    <?php
class dbConnection extends PDO{

public function __construct() {    
  switch(DB_TYPE){
    case "mysql":
        $dbconn = "mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET;
        break;
    case "sqlite":
        $dbconn = "sqlite:".DB_PATH.";charset=".DB_CHARSET;
        break;
    case "postgresql":
        $dbconn = "pgsql:host=".DB_HOST." dbname=".DB_NAME.";charset=".DB_CHARSET;
        break;
    }

    parent::__construct($dbconn,DB_USER,DB_PASS,array(PDO::ATTR_EMULATE_PREPARES => false,PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));

   }
}
?>

如果我输错密码,我会

  

连接错误,因为:SQLSTATE [28000] [1045]拒绝访问   用户'microaid_logger'@'localhost'(使用密码:YES)

正如您的常识所指出的,如果连接不成功,则会抛出异常,如果密码错误,也会触发该异常。如果要格式化错误消息的文本或处理它,只需设置自定义错误处理程序as described here