PDO访存总是返回false在PHP
问题描述:
我想在PHP中使用PDO运行一个简单的查询。该代码非常简单:PDO访存总是返回false在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'" }
...不管我投入,没有抛出异常。而且,如标题所示,fetch()
总是返回false。你应该知道,如果我将SQL查询“硬编码”到字符串中,所有这些都可以正常工作。换句话说,如果我将$sql_query
设置为“select * from Articles where title ='MD Example'”,那么fetch()
将返回预期结果。这里发生了什么?
答
来自各地的占位符删除引号:
$sql_query = "select * from Articles where title=:article";
//---------------------------------------------^^^^^^^^^^^
通过使用一个占位符,你放弃对具有正确引用字符串或乱猜数值责任。这成为PDO正确转义和引用您的投入的业务。
通过留在报价,而不是使用占位,PDO确实将查询在title
列中的值:article
,而不是你传递给阵列的价值。
可能是我在这里得到的最快答案。一旦等待10分钟结束,我会接受它。 – Hassan