首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PDO::setAttribute()似乎不会影响新的PDO()?

PDO::setAttribute()似乎不会影响新的PDO()?
EN

Stack Overflow用户
提问于 2015-05-31 13:10:00
回答 1查看 418关注 0票数 1

我有这个密码

代码语言:javascript
复制
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

我的问题是,即使我不包括这句话:

代码语言:javascript
复制
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

我仍然得到同样的例外,我认为没有必要使用它?是吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-31 13:14:25

这仅仅是因为这是PDO::__construct()的行为,因为您可以在手册中阅读

如果连接到请求数据库的尝试失败,PDO::__construct()将引发PDOException

但是,如果不将错误模式设置为异常,则需要:

代码语言:javascript
复制
try {
    $dbh = new PDO('mysql:host=localhost;dbname=db_informations', 'root', '');
    $dbh->query("SELECT * FROM aTableWhichDoesNotExists");
} catch(PDOException $e) {
    echo $e->getMessage();
}

因为您没有设置错误模式,所以您将不会收到任何excpetion消息或错误。所以你需要这样做:

代码语言:javascript
复制
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()必须是静态的,这样您就可以在获取类的实例之前设置/调用它)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30557800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档