2009-11-04 36 views
2

有没有办法用(My-)SQL中的预准备语句选择多个值?准备好SQL语句的地方有多个值?

我试图从与IN-关键字表中选择几排的,是这样的:

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

的“1,2,3”应作为语句的参数传递。 这是可能的PHP/PDO,或者我必须concaterate值并直接插入它的声明(我有一个不好的感觉,因为注射)。

+0

我认为答案在这里:[stackoverflow.com/MySQL准备的语句与一个可变大小的变量列表](http://stackoverflow.com/questions/327274/mysql-prepared-statements-with-a-variable-大小可变列表) – manji 2009-11-04 20:21:28

回答

1

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

-1

尝试通过您在列表作为aconcatenated字符串,做到这一点(不是很高性能的,但它应该工作:我想我看到乔尔Spolsky的使用这种技术的地方一个答案):

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

我很想投票-1 ... :( – 2009-11-04 20:15:06

+0

-1)糟糕的主意。没有办法Joel建议这个。如果你的| 1 | 2 | 3 |值是动态的呢? – 2009-11-04 20:18:09

+0

now I'已经找到了它 - 他有28 upvotes它!http://stackoverflow.com/questions/337704/parameterizing-a-sql-in-clause/337817#337817 – davek 2009-11-04 20:20:53

0

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