【问题标题】:PDO won't return result even if query is valid即使查询有效,PDO 也不会返回结果
【发布时间】:2023-04-05 04:39:01
【问题描述】:

我使用 PDO 数百次,但现在我非常沮丧 - 对我来说一切似乎都很好,我一定错过了一些东西......我使用 PGSql 和 PDO。将查询传递给 PgAdmin 3 并运行它 - 没问题!但从 PDO 调用它是另一回事。

我的代码:

(...checking if $name is null and so on...)

$query = "SELECT 
            *
            FROM
            out.city
            WHERE 
            city_name ILIKE ?";

        $stmt = $this->db->prepare($query);
        try{
            $res = $stmt->execute(array("'".$name."'"));
            $ret = $res->fetchAll(PDO::FETCH_ASSOC);
(... rest of try-catch block...)

问题是 $res 返回布尔值 (true) 而不是对象。它导致错误:

PHP Fatal error:  Call to a member function fetchAll() on a non-object

我尝试了几种将$name 放入查询的方法——使用问号、绑定或只是加入字符串(我知道,不好的方法)。它们都不起作用。

【问题讨论】:

    标签: php postgresql pdo


    【解决方案1】:

    应该只准备句柄(对象),将$res->替换为$stmt->

    $stmt->fetchAll(PDO::FETCH_ASSOC);
    

    【讨论】:

    • 我是盲人。在一周的中间。我对此感到难过。谢谢!
    • 而且不需要$res
    • @hjpotter92 $res 是有原因的。即使您使用 try-catch,有时查询也可能会失败而不会抛出异常。对我来说,最好总是写 $res 并在插入和更新时返回它,因为如果出现故障,我总是可以回滚事务。
    • @ex3v 有例子吗?
    • 例如,当您在处理一个庞大而古老的项目时,有人忘记将PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION 添加到连接字符串,或者ORM 有时不会因为错误而引发异常。这是一个安全锁。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-11
    • 2020-03-20
    • 1970-01-01
    • 2015-01-29
    • 2017-05-18
    • 1970-01-01
    相关资源
    最近更新 更多