PDO 怎么能不 return 行 pg_query() 呢?

How can PDO not return a row which pg_query() does?

我有一个 table 具有 bigserial PK,一个字符变化的 FK 和一个 bigint FK 以及对这些 FK 的唯一约束,一个变化的 NOT NULL 字符和两个可为空的 smallint。

所有这些都是 运行在一个 VM 中使用 Ubuntu 14.04.2 LTS、PHP 5.5.9 和 PostgreSQL 9.3 以及发行版中的所有其他软件包。

我做到了

$pdo->query("SELECT * FROM table")->fetchAll(PDO::FETCH_ASSOC)

$r = pg_query($db, "SELECT * FROM table");
pg_fetch_all($r)

后者return编辑了所有行,而前者return编辑了除一行以外的所有行。

我也尝试 select 那一行,虽然 pg_*() 函数按预期工作,但 PDO 没有 return 任何行。

更奇怪的是,差异只出现在 PHP-FPM 和 lighttpd 1.4.33 中,但当 运行 和 PHP CLI 在 shell.

怎么可能? 有没有其他人遇到过类似的情况? 我如何确定 PDO 不会再次让我失望?

我什至尝试重启虚拟机并重启 PostgreSQL,但结果并没有改变。

遗憾的是,我没有这些东西的备份,因为我必须让事情尽快开始工作,所以我删除了那个神秘的行并用一个新的行替换它,除了 PK 之外所有列都相同。

新行 return 两者均已正确编辑。

事实证明,当 PostgreSQL 的索引损坏时,它可能会产生令人困惑和不一致的结果。

在这种情况下,只需重新创建索引并检查它是否可以解决您的问题。