2011-08-15 19 views
2

,其原因应该是显而易见的,这是杀人搜索...正确的格式/ NOT IN查询

如何做到这一点的PDO:

SELECT thing FROM things WHERE thing_uid IN (...) 

我特定的用例是一个通过从具有数十个复选框的表单中抽取数组而构建的字符串。在标准的MySQL,这是很容易...

$thingString = implode("', '", $thingArray); 
$q = "SELECT thing FROM things WHERE thing_uid IN ('$thingString')"; 

,但我想是从PDO的防注入保护...约束PARAMS和所有受益。那我该怎么做呢?

+1

@Kris问题没有说明绑定表名。这是关于在IN()'查询中有一个可变数量的占位符。 –

+0

克里斯你不知道我在说什么 – Drew

回答

6

根据您的值创建尽可能多的?的数组,并将其引入查询。

$placeholders = array_fill(0, count($thingArray), '?'); 
$sql = "SELECT thing FROM things WHERE thing_uid IN (" . implode(',', $placeholders) . ")"; 
+2

也可以使用['array_fill()'](http://php.net/manual/en/function.array-fill.php) – Phil

+2

所以我准备与占位符**?**在数量上与我的参数相同,然后是'$ stmt-> execute($ thingArray);'我很好走,对吗? (目前不能测试,所以我问) – Drew

+1

@Andrew是的,那个作品 –