【问题标题】:PHP - Propel PDO Returns zero rows regardless of queryPHP - 无论查询如何,推进 PDO 返回零行
【发布时间】:2014-04-07 19:53:35
【问题描述】:

我正在尝试直接通过 PDO 执行查询,尽管我使用 Propel 作为我的 ORM。问题是查询总是返回 0 条记录。我不确定会发生什么,因为它昨晚运行得非常好,然后当我今天早上起床开始我的项目时,我一直在处理这个特殊问题。

起初,我试图返回一个带参数的 JOIN 查询,我知道有符合条件的记录。然后大约一个小时后认为这是我的参数等,我转而使用一个非常简单的 select 语句。

php代码:

$sql = "SELECT * FROM league;";
$con = Propel::getConnection();
$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $con->prepare($sql);
$rows = $stmt->fetchAll();

我已尝试以相同的结果查询数据库中的所有表。可能是什么问题呢?我已经在 phpMyAdmin 和 MySQLWorkbench 中尝试过查询。

一天半之后,我无法弄清楚问题出在哪里。希望有人能帮忙。

谢谢。

【问题讨论】:

  • ; 查询中的分号可能导致问题
  • 你也忘记在fetchAll()之前打电话给execute()
  • 天啊!精神近视万岁!我不敢相信我错过了。挺尴尬的。谢谢,猴子。
  • 只是快速跟进。 “setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION)” 不应该通过在执行前调用 fetchAll() 来排除吗?只是好奇。再次感谢。
  • 是的,我想,但我没有看到你的异常处理,所以我不知道what you expected vs what you received

标签: php mysql sql pdo


【解决方案1】:

正如评论中提到的正确答案:您忘记在 fetchAll() 之前调用 execute()

代码的工作版本是:

$sql = "SELECT * FROM league;";
$con = Propel::getConnection();
$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $con->prepare($sql);
$stmt->execute(); // <-- This executes the statement, without it, there is no result set to fetch
$rows = $stmt->fetchAll();

【讨论】:

    猜你喜欢
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    • 2017-01-25
    • 2023-04-10
    相关资源
    最近更新 更多