准备好的SQL语句在哪里有多个值?

时间:2009-11-04 20:06:39

标签: sql mysql sql-injection

有没有办法在(My-)SQL?

中使用预准备语句选择多个值

我正在尝试使用IN关键字从表中选择几行,例如:

SELECT * 
  FROM table 
 where id IN (1, 2, 3)

“1,2,3”应作为语句的参数传递。 这是可能的PHP / PDO或我必须连接值并将其直接插入到语句中(由于注入,我对此感觉不好)。

3 个答案:

答案 0 :(得分:1)

如果您有来自用户的“内容”数组,则可以使用array_fill构建占位符列表,通过调用"?, ?, ?, ..."生成implode之类的字符串阵列。或者,您可以确保数组中的所有内容都是整数(例如,使用intval)并直接使用它来构建查询。

答案 1 :(得分:0)

我会传入一个整数数组,然后执行String.Join将它们放在准备好的语句中。你不能将任何东西注入整数!

答案 2 :(得分:-1)

尝试将你的in-list作为aconcatenated字符串传递并执行此操作(性能不是很高但它应该可以工作:我想我在某处使用这种技术看到了Joel Spolsky的答案):

SELECT * FROM table where concat('|',id,'|') like '%|1|2|3|%'