我一直被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)
我唯一能够做到的是直接将值放在字符串中而不进行绑定,但我确信一定有更简单的方法可以实现这一点。
1,2,3,4
是正确的,但1, 2, 3, 4
是不正确的。 - R Picheta