php - PDO 绑定(bind)参数不起作用

标签 php mysql pdo prepared-statement

我有这样的查询:

$stmt = $db->query('
    SELECT e.id
    FROM `entity` e
    WHERE e.deleted = 0 AND e.published = 1 AND e.date <= CURDATE() ' .
          ( !empty($_SESSION['filter']) ? ' AND e.category = :category' : '' )
);

if (!empty($_SESSION['filter'])) {
    $stmt->bindValue('category', $_SESSION['filter'], PDO::PARAM_INT);
}

$entities = $stmt->fetchAll(PDO::FETCH_ASSOC);

我在类别 1 中有一些条目并且设置了 $_SESSION['filter']:

string(1) "1"

但它不会加载任何条目,也不会出现任何错误。

我也尝试过:

  • category 重命名为其他名称,例如 myvalue
  • 设置一个新变量:$x = 1; $stmt->bindValue('category', $x, PDO::PARAM_INT);
  • 直接编辑查询:' AND e.category = 1'' AND e.category = $_SESSION['filter']'

在所有的可能性中,只有最后一个可行。这也是我实际上不想使用的那个。我该如何解决这个问题?

最佳答案

PDO::query() 在单个函数调用中执行 SQL 语句,将语句返回的结果集(如果有)作为 PDOStatement 对象返回。

您的查询已经执行。绑定(bind)值无效。

您应该先准备您的查询。

$stmt = $db->prepare('
    SELECT e.id
    FROM `entity` e
    WHERE e.deleted = 0 AND e.published = 1 AND e.date <= CURDATE() ' .
      ( !empty($_SESSION['filter']) ? ' AND e.category = :category' : '' )
);

关于php - PDO 绑定(bind)参数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19189026/

相关文章:

java - 为什么服务器端数据表在一页中显示所有记录并且搜索不起作用?

php - 无法设置日期时间

mysql - 如果 mysql 列有数据,则返回 1 或 0

php - 最后插入 ID 未返回

php - 您可以在架构中指定 Composer 的特定版本吗?

php - mysql 拒绝在第一个值之前插入转义斜杠

php - 如何使用来自 url 的唯一 ID 选择行

php - 在没有 Imagick 的情况下在 PHP 中将 TIFF 图像转换为 PNG/JPG/GIF

PHP:自动更新mysql中的表

php - unlink 似乎不适用于 foreach 循环