我正在尝试在 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()
会返回预期的结果。这是怎么回事?
最佳答案
移除占位符周围的引号:
$sql_query = "select * from Articles where title=:article";
//---------------------------------------------^^^^^^^^^^^
通过使用占位符,您放弃了必须正确引用字符串或不引用数值的责任。 PDO 的职责就是为您正确转义和引用输入。
通过留在引号中,而不是使用占位符,PDO 将逐字查询 title
列中的值 :article
,而不是您传递的值到 execute()
数组。
关于php - PDO fetch 在 PHP 中总是返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11006692/