首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有子查询的PDOStatement查询返回空结果

带有子查询的PDOStatement查询返回空结果
EN

Stack Overflow用户
提问于 2013-12-09 10:32:00
回答 2查看 2.3K关注 0票数 1

我有下面的PHP代码,它有一个奇怪的行为。系统由PostgreSQL数据库支持,PHP为5.3.15。

代码语言:javascript
运行
复制
    $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替换的占位符),它将返回我想要得到的行。

我设法发现子查询是这里的问题。如果我将它们注释掉并使用以下查询,则将返回行。当然,这也会返回行,我尝试用子查询过滤掉这些行。

代码语言:javascript
运行
复制
$sql = "SELECT ce.id FROM calendar_events AS ce
        WHERE ce.rowid = :rowid";

PDO是根本不支持这种子查询,还是在我的代码中有任何错误我找不到?

提前感谢!

EN

Stack Overflow用户

回答已采纳

发布于 2013-12-09 12:03:33

这不是PDO的问题,而是我的代码本身的问题。在反复检查调用上述函数的代码之后,我发现了一些语句,在执行上述代码之前,这些语句将所讨论的行的状态设置为'D‘。

所以这个问题现在已经过时了,很抱歉浪费你们的时间,伙计们!

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20468339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档