gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 06:26:43 26 4
gpt4 key购买 nike

我有这个代码

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();
}

它给了我异常信息:

SQLSTATE[HY000] [1049] Unknown database 'db_informations'

因为我的数据库的正确名称只是db_information

我的问题是,即使我不包含以下行:

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

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

最佳答案

这仅仅是因为这是 PDO::__construct() 的行为正如您在 manual 中看到的那样:

PDO::__construct() throws a PDOException if the attempt to connect to the requested database fails.

但是如果你没有将错误模式设置为 Exception 而你这样做了:

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

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

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();
}

要接收异常,然后您可以捕获该异常:

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'test.atablewhichdoesnotexists' doesn't exist


另外,如果你只是从逻辑上思考:

setAttribute() 需要与 -> 一起使用,这意味着您需要类的实例来调用该方法。那么,如果无法正确创建实例,您将如何调用该方法?

(所以这意味着 setAttribute() 必须是静态的,这样您就可以在获取类的实例之前设置一些东西/调用它)

关于php - PDO::setAttribute() 似乎不会影响新的 PDO()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30557800/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com