3

我正在尝试在 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()返回预期结果。这里发生了什么?

4

1 回答 1

3

从占位符周围删除引号:

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

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

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

于 2012-06-13T00:29:08.733 回答