我有这个密码
try {
$dbh = new PDO('mysql:host=localhost;dbname=db_informations', 'root', '');
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo $e->getMessage();
}它给了我一个例外信息:
SQLSTATEHY000未知数据库“db_informations”
因为我的数据库的正确名称仅为db_information。
我的问题是,即使我不包括这句话:
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);我仍然得到同样的例外,我认为没有必要使用它?是吗?
发布于 2015-05-31 13:14:25
这仅仅是因为这是PDO::__construct()的行为,因为您可以在手册中阅读
如果连接到请求数据库的尝试失败,PDO::__construct()将引发PDOException。
但是,如果不将错误模式设置为异常,则需要:
try {
$dbh = new PDO('mysql:host=localhost;dbname=db_informations', 'root', '');
$dbh->query("SELECT * FROM aTableWhichDoesNotExists");
} catch(PDOException $e) {
echo $e->getMessage();
}因为您没有设置错误模式,所以您将不会收到任何excpetion消息或错误。所以你需要这样做:
try {
$dbh = new PDO('mysql:host=localhost;dbname=db_informations', 'root', '');
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->query("SELECT * FROM aTableWhichDoesNotExists");
} catch(PDOException $e) {
echo $e->getMessage();
}若要接收异常,则可以捕获该异常:
SQLSTATE42S02:未找到基表或视图: 1146表'test.atablewhichdoesnotexists‘不存在
另外,如果你只是从逻辑上想:
setAttribute()需要与->一起使用,这意味着您需要类的一个实例来调用该方法。那么,如果无法正确创建实例,如何调用该方法呢?
(这意味着setAttribute()必须是静态的,这样您就可以在获取类的实例之前设置/调用它)
https://stackoverflow.com/questions/30557800
复制相似问题