有没有办法用(My-)SQL中的预准备语句选择多个值?准备好SQL语句的地方有多个值?
我试图从与IN-关键字表中选择几排的,是这样的:
SELECT *
FROM table
where id IN (1, 2, 3)
的“1,2,3”应作为语句的参数传递。 这是可能的PHP/PDO,或者我必须concaterate值并直接插入它的声明(我有一个不好的感觉,因为注射)。
有没有办法用(My-)SQL中的预准备语句选择多个值?准备好SQL语句的地方有多个值?
我试图从与IN-关键字表中选择几排的,是这样的:
SELECT *
FROM table
where id IN (1, 2, 3)
的“1,2,3”应作为语句的参数传递。 这是可能的PHP/PDO,或者我必须concaterate值并直接插入它的声明(我有一个不好的感觉,因为注射)。
如果你有那个来自用户的“东西”的数组,你可以建立占位符列表与array_fill
,通过阵列上调用implode
产生像"?, ?, ?, ..."
的字符串。或者,您可以确保数组中的所有内容都是整数(例如,使用intval
),并直接使用它来构建查询。
尝试通过您在列表作为aconcatenated字符串,做到这一点(不是很高性能的,但它应该工作:我想我看到乔尔Spolsky的使用这种技术的地方一个答案):
SELECT * FROM table where concat('|',id,'|') like '%|1|2|3|%'
我很想投票-1 ... :( – 2009-11-04 20:15:06
-1)糟糕的主意。没有办法Joel建议这个。如果你的| 1 | 2 | 3 |值是动态的呢? – 2009-11-04 20:18:09
now I'已经找到了它 - 他有28 upvotes它!http://stackoverflow.com/questions/337704/parameterizing-a-sql-in-clause/337817#337817 – davek 2009-11-04 20:20:53
我会通过在一个整数数组中,然后执行String.Join将它们放在准备好的语句中。你不能注入任何东西到一个整数!
我认为答案在这里:[stackoverflow.com/MySQL准备的语句与一个可变大小的变量列表](http://stackoverflow.com/questions/327274/mysql-prepared-statements-with-a-variable-大小可变列表) – manji 2009-11-04 20:21:28