2011-02-08 104 views
1

我有一个这样的查询与IN子句PHP数组MySQL查询

SQL = “

某些查询 WHERE some_item IN()

”;

我必须做一个for循环来把php数组的所有项放到IN子句中,还是有一个函数或方法来做到这一点?

+0

注意:您可以[格式线为代码(http://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-块)通过缩进它们四个空格。编辑器工具栏中的“{}”按钮可以为您做到这一点。编辑你的问题并尝试一下。单击编辑器工具栏中的橙色问号以获取更多信息和格式化提示。 – outis 2011-04-23 20:04:34

回答

0

你可以尝试破灭

$item_ids = array(1, 2, 3, 4, 5); // somehow populate this array 
$item_list = implode(',', $item_ids); 

$sql = "SOME QUERY WHERE some_item IN ({$item_list})"; 
0

您可以使用implode,如:

$ids = array(1, 2, 3); 
$query = 'SELECT * FROM items WHERE id IN(' . implode(',', $ids) . ')'; 
+0

非常感谢你! – Alexander 2011-02-08 09:48:37

1

对于数组中的数值:

sprintf("... WHERE some_item IN (%s) ...",implode(",",$numeric_array)); 

对于字符串值:

sprintf("... WHERE some_item IN ('%s') ...",implode("','",$escaped_string_array)); 

要小心,以逃避当值构建阵列。

希望这会有所帮助!

+1

你可以做一个array_filter()之前调用转义方法等http://php.net/manual/en/function.array-filter.php – dogmatic69 2011-02-08 11:07:45

+0

+1有用的评论,谢谢:) – aorcsik 2011-02-08 11:09:24

1

如果你有一个数组中的东西的列表,你可以使用JOIN来为你构建它。这对于数字值来说是最简单的,因为你不需要引用任何事物。事情是这样的:

$sql = 'SOME QUERY WHERE some_item IN (' . join(',', $a_myData) . ')'; 

如果阵列包含字符串,你应该为你把数据放入数组逃脱数据。但一旦你做完了,你可以做类似于上面的事情,添加引号。

$sql = 'SOME QUERY WHERE some_item IN ("' . join('","', $a_myData) . '")'; 

一个潜在的问题是一个空数组,因为上面的例子会给你IN (""),这有可能匹配你不想要的东西。

上面的例子也没有考虑NULL值。一种解决方法是用引号已经在其周围的字符串填充你的数组(因此你可以使用NULL作为它自己的值)。