我对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
是错误的。奇怪的是,PDO :: errorInfo()和PDOStatement :: errorInfo()都返回空数组,如下所示:
array(3) {
[0]=> string(5) "00000"
[1]=> NULL
[2]=> NULL
}
我怀疑MySQL连接存在一些问题,但是连接工作正常,不会抛出任何异常,MySQL服务器空闲,有足够的连接可用。 MySQL或PHP日志中没有错误。
所以我的问题是,如何解决这个问题呢?我需要知道,为什么有时fetch()会失败并且错误而且errorInfo()中没有关于错误的信息
答案 0 :(得分:0)
好的,我发现了造成这种奇怪行为的原因。我在MySQL服务器上有2个非常相似的数据库。我使用它们的持久连接。不知何故(???)PHP的PDO有时是在选择不同的数据库的情况下创建的。
我永远不会想到这一点,因为在new PDO();
我有正确的数据库我需要使用。但由于一些奇怪的原因,连接到不同的数据库。它必须使用持久连接做一些事情,因为当我禁用使用持久连接时,一切正常。
所以我可能会问另一个问题 - 这次 - 为什么PDO在使用持久性时应该连接到不同的数据库。