我正在尝试使用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()
将返回预期结果。这是怎么回事?
答案 0 :(得分:3)
从占位符周围删除引号:
$sql_query = "select * from Articles where title=:article";
//---------------------------------------------^^^^^^^^^^^
通过使用占位符,您放弃了必须正确引用字符串或不引用数值的责任。这成为PDO正确逃避并为您引用输入的业务。
通过留在引号中,而不是使用占位符,PDO将逐字地查询:article
列中的值title
,而不是您传递给execute()
的值阵列。