php - PDO fetch 在 PHP 中总是返回 false

标签 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() 会返回预期的结果。这是怎么回事?

最佳答案

移除占位符周围的引号:

$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/

相关文章:

php - 在不离开页面的情况下执行 PHP

database-design - 在 Cassandra 中拥有许多键空间和可能的数千个表是个好主意吗?

mysql - 数据库查询所需结果

database - 为我的 Swift 解析表添加值(value)

php - 无法在 MySQL 上使用 PDO 设置当前 _timestamp 或 now()

php - 检查准备好的语句 PDO 的结果?

php - .htaccess 文件 : redirect localhost/sitelogin/profile/name to localhost/sitelogin/profile. php?用户名=名称

java - HttpClient JSONData POST 请求以及 PHP 服务器的响应

php - MySQL中如何将数据从一张表迁移到另一张表

mysql - PDO UNION 函数仅处理第一个 SELECT 语句