PDO提取总是在PHP中返回false

时间:2012-06-13 00:27:29

标签: php database pdo

我正在尝试使用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()将返回预期结果。这是怎么回事?

1 个答案:

答案 0 :(得分:3)

从占位符周围删除引号:

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

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

通过留在引号中,而不是使用占位符,PDO将逐字地查询:article列中的值title,而不是您传递给execute()的值阵列。