我有下面的PHP代码,它有一个奇怪的行为。系统由PostgreSQL数据库支持,PHP为5.3.15。
$sql = "SELECT ce.id FROM calendar_events AS ce
WHERE ce.rowid = :rowid
AND ((SELECT count(*) FROM calendar_events_attendees AS cea WHERE cea.event_id = ce.id AND cea.status <> 'D') > 0
OR (SELECT count(*) FROM calendar_events_globalfnbl AS ceg WHERE ceg.event_id = ce.id AND ceg.status <> 'D') > 0)";
$stmt = db_prepare($sql); // Creates a PDOStatement
$stmt->bindValue(":rowid", $rowid, PDO::PARAM_INT);
$rv = $stmt->execute();
if($rv) {
return $stmt->fetchAll(PDO::FETCH_COLUMN, 0);
}
else {
return null;
}查询执行时没有错误,但函数返回一个空数组。数据库中肯定有行要查找,如果我在pgAdmin中执行查询(当然是由ID替换的占位符),它将返回我想要得到的行。
我设法发现子查询是这里的问题。如果我将它们注释掉并使用以下查询,则将返回行。当然,这也会返回行,我尝试用子查询过滤掉这些行。
$sql = "SELECT ce.id FROM calendar_events AS ce
WHERE ce.rowid = :rowid";PDO是根本不支持这种子查询,还是在我的代码中有任何错误我找不到?
提前感谢!
发布于 2013-12-09 12:03:33
这不是PDO的问题,而是我的代码本身的问题。在反复检查调用上述函数的代码之后,我发现了一些语句,在执行上述代码之前,这些语句将所讨论的行的状态设置为'D‘。
所以这个问题现在已经过时了,很抱歉浪费你们的时间,伙计们!
https://stackoverflow.com/questions/20468339
复制相似问题