我有一个mySQL语句,如下所示:
SELECT *
FROM `events_table`
WHERE `event_category` NOT IN (:category_ids)
我使用bindParam将$ category_ids绑定到:category_ids。
category_id是一系列逗号描述的数字,例如1,2,8
但是,一旦执行该语句就变为
SELECT *
FROM `table`
WHERE `event_category` NOT IN ('1,2,8')
数字周围的这些引号会破坏NOT IN功能。
有没有办法使用bindParam而不插入这些引号?简单地写
是否安全SELECT *
FROM `table`
WHERE `event_category` NOT IN ($category_ids)
答案 0 :(得分:1)
你可以使用这个
$category_ids = array(1, 2, 8);
$inQuery = implode(',', array_fill(0, count($category_ids), '?'));
$db = new PDO(...);
$stmt = $db->prepare(
'SELECT *
FROM table
WHERE `event_category` IN (' . $inQuery . ')'
);
// bindvalue is 1-indexed, so $k+1
foreach ($category_ids as $k => $id)
$stmt->bindValue(($k+1), $id);
$stmt->execute();
答案 1 :(得分:0)
试,
$sth->bindParam(':category_ids', $category_ids, PDO::PARAM_INT);