【发布时间】:2010-12-07 21:06:42
【问题描述】:
我有一个关于 PDO 的问题,在被它困扰了很长一段时间后,我真的很想得到一个答案。
举个例子:
我将一个 ID 数组绑定到一个 PDO 语句,以便在 MySQL IN 语句中使用。
数组会说:$values = array(1,2,3,4,5,6,7,8);
数据库安全变量是 $products = implode(',' $values);
因此,$products 将是一个 STRING,其值为:'1,2,3,4,5,6,7,8 '
语句如下所示:
SELECT users.id
FROM users
JOIN products
ON products.user_id = users.id
WHERE products IN (:products)
当然,$products 将绑定到声明为 :products。
但是,当语句被编译并绑定值时,它实际上看起来像这样:
SELECT users.id
FROM users
JOIN products
ON products.user_id = users.id
WHERE products IN ('1,2,3,4,5,6,7,8')
问题在于它将 IN 语句中的所有内容作为单个字符串执行,因为我已将其准备为逗号分隔值以绑定到语句。
我真正需要的是:
SELECT users.id
FROM users
JOIN products
ON products.user_id = users.id
WHERE products IN (1,2,3,4,5,6,7,8)
我实际上可以做到这一点的唯一方法是将值放在字符串本身而不绑定它们,但是我肯定必须有一种更简单的方法来做到这一点。
【问题讨论】: