PHP中PDO fetch总是返回false

4

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

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()将返回预期的结果。这里到底发生了什么?
1个回答

4

将占位符周围的引号删除:

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

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

如果保留引号而不使用占位符,则PDO将字面上查询title列中的:article值,而不是您传递给execute()数组的值。


这可能是我在这里得到的最快的答案。等待10分钟后,我会接受它。 - user377628

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接