gpt4 book ai didi

php - PDOStatement::fetch 偶尔会返回 false,但 errorInfo() 为空

转载 作者:行者123 更新时间:2023-11-29 17:34:20 24 4
gpt4 key购买 nike

我在 PDO 方面遇到了奇怪的问题。代码是这样的:

$dbh = new PDO($dsn, $user, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
try {
$sth = $dbh->prepare("SELECT ... FROM .... ");
$sth->execute();
$result = $sth->fetch(PDO::FETCH_ASSOC);
if (!$result) {
print_r($dbh->errorInfo());
print_r($sth->errorInfo());
}
} catch(PDOException $e) {
print_r($e->getMessage());
}

所以 PDO 的使用非常普遍。并且代码在大多数情况下都按预期工作。但有时 $result 为 false。奇怪的是 PDO::errorInfo() 和 PDOStatement::errorInfo() 都返回空数组,如下所示:

array(3) {
[0]=> string(5) "00000"
[1]=> NULL
[2]=> NULL
}

我怀疑MySQL连接有问题,但是连接工作正常,没有抛出任何异常,MySQL服务器空闲,有足够的可用连接。 MySQL 或 PHP 日志中没有错误。

所以我的问题是,如何进一步解决这个问题?我需要知道,为什么有时 fetch() 会失败并返回 false,并且 errorInfo() 中没有有关错误的信息

最佳答案

好的,我已经找到了导致这种奇怪行为的原因。我在这个 MySQL 服务器上有 2 个非常相似的数据库。我与它们都使用持久连接。不知何故(???)PHP 的 PDO 有时是使用选择的不同数据库创建的。

我永远不会想到这一点,因为在 new PDO(); 中我有需要使用的正确数据库。但由于某种奇怪的原因,连接到了不同的数据库。它必须与使用持久连接有关,因为当我禁用使用持久连接时,一切正常。

所以我可能会问另一个问题 - 这次 - 为什么 PDO 在使用持久性时应该连接到不同的数据库。

关于php - PDOStatement::fetch 偶尔会返回 false,但 errorInfo() 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50422388/

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