php - PDO bindParam 破坏 mySQL 查询

标签 php mysql pdo

我有一个 mySQL 语句,如下所示:

SELECT *
FROM `events_table`
WHERE `event_category` NOT IN (:category_ids)

我使用bindParam将$category_ids绑定(bind)到: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)

最佳答案

你可能会用这个

   $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();

关于php - PDO bindParam 破坏 mySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21467082/

相关文章:

php - ZMQ订阅者在长时间间隔后没有收到来自远程服务器的消息

php - 将一行添加到另一行

MYSQL CURRENT_TIMESTAMP 仅适用于更新

mysql - PHP ENV_ 变量 : UTF-8 encoding of £ (Pound)

php - 锁定 SQL 表,然后执行事务,以根据选择值插入条件

php - Swift - 查找附近运行应用程序的其他用户

javascript - 如何弹出一个带有文本框的javascript警告框来更新mysql表?

php - SQL - 复杂的 JOIN 查询

php pdo将字段表动态jquery插入到mysql中

php - PDO 关闭连接