我有一个PDO的问题,在被它困扰了很长一段时间后,我真的很想得到一个答案.
举个例子:
我将一个ID数组绑定到一个PDO语句,以便在MySQL in语句中使用.
数组应该是:$values = array(1,2,3,4,5,6,7,8);
数据库安全变量应该是$products = implode(',' $values);
因此,$products将是值为:'1,2,3,4,5,6,7,8'的STRING
该语句将如下所示:
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)
实际上,我能做到这一点的唯一方法是将值放在字符串本身中,而不绑定它们,不过我肯定知道必须有一种更简单的方法来做到这一点.