【问题标题】:PDO fetch always returns false in PHPPDO fetch 在 PHP 中总是返回 false
【发布时间】:2023-03-28 04:11:01
【问题描述】:

我正在尝试在 PHP 中使用 PDO 运行一个简单的查询。代码很简单:

try {

    $sql_query = "select * from Articles where title=':article'";
    $dbh = get_PDO_connection();
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $stmt = $dbh->prepare($sql_query);
    $stmt->execute( array( ':article' => "MD Example") );
    var_dump($stmt);
    $row = $stmt->fetch();
    //if($row==null)return 'null';
    var_dump($row);
} catch (PDOException $e) {
    print $e->getMessage ();
}

var_dump($stmt) 总是打印:

object(PDOStatement)#3 (1) { ["queryString"]=> string(45) "select * from Articles where title=':article'" }

...无论我在execute() 中输入什么,都不会抛出异常。而且,正如标题所述,fetch() 总是返回 false。您应该知道,如果我将 SQL 查询“硬编码”到字符串中,所有这些都可以正常工作。换句话说,如果我将$sql_query 设置为“select * from Articles where title='MD Example'”,那么fetch() 会返回预期的结果。这是怎么回事?

【问题讨论】:

    标签: php database pdo


    【解决方案1】:

    从占位符周围删除引号:

    $sql_query = "select * from Articles where title=:article";
    //---------------------------------------------^^^^^^^^^^^
    

    通过使用占位符,您放弃了必须正确引用字符串或不引用数值的责任。这成为 PDO 为您正确转义和引用输入的业务。

    通过保留引号而不是使用占位符,PDO 将真正查询title 列中的值:article,而不是您传递给execute() 数组的值。

    【讨论】:

    • 可能是我在这里得到的最快答案。等 10 分钟后我会接受的。
    猜你喜欢
    • 1970-01-01
    • 2020-12-27
    • 2014-08-26
    • 2012-08-23
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多