我有这样的查询:
$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/