我在任何地方都找不到答案。也许真的很简单
我的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;
}我只想测试连接是否工作,即。如果密码、用户名、数据库名和主机名拼写正确。
尝试,抛出似乎只是拾取基本的错误,如果驱动程序拼写错误。如果密码错误,它不会抛出错误。
谢谢
发布于 2013-08-14 23:41:35
在这个问题上,只需单击一下,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错误-因此,您可以使用站点范围的设置来定义行为。可以稍后添加自定义异常处理程序,但不是必需的。特别是对于新用户,建议使用未处理的异常,因为它们非常有用,非常安全。更多信息...
发布于 2013-08-14 23:36:27
我使用以下代码进行连接:
<?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));
}
}
?>如果我输入了错误的密码,我会得到
连接错误,因为:用户'microaid_logger'@'localhost‘的SQLSTATE28000访问被拒绝(使用密码: YES)
正如您的常识所指出的,如果连接不成功,则已经抛出了一个异常,如果密码错误,也会触发该异常。如果您想格式化或处理错误消息的文本,只需设置一个自定义错误处理程序as described here
https://stackoverflow.com/questions/18235881
复制相似问题