我无法在任何地方找到答案。也许它非常简单
我有这样的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;
}
我想测试连接是否有效,即。如果密码,用户名,数据库名称和主机名拼写正确。
尝试,抛出似乎只是拾取基本错误,就像驱动程序拼写错误一样。如果说密码错误,它不会引发错误。感谢
答案 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