我有一个关于 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'
该声明将如下所示:
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)
我实际上可以做到这一点的唯一方法是将值放在字符串本身中而不绑定它们,但是我肯定必须有一种更简单的方法来做到这一点。