我有一个这样的查询与IN子句PHP数组MySQL查询
SQL = “
某些查询 WHERE some_item IN()
”;
我必须做一个for循环来把php数组的所有项放到IN子句中,还是有一个函数或方法来做到这一点?
我有一个这样的查询与IN子句PHP数组MySQL查询
SQL = “
某些查询 WHERE some_item IN()
”;
我必须做一个for循环来把php数组的所有项放到IN子句中,还是有一个函数或方法来做到这一点?
你可以尝试破灭
$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})";
http://php.net/manual/en/function.implode.php
这里是一个简单的例子:
$阵列=阵列( '姓', '邮件', '电话');
$ comma_separated = implode(“,”,$ array);
对于数组中的数值:
sprintf("... WHERE some_item IN (%s) ...",implode(",",$numeric_array));
对于字符串值:
sprintf("... WHERE some_item IN ('%s') ...",implode("','",$escaped_string_array));
要小心,以逃避当值构建阵列。
希望这会有所帮助!
你可以做一个array_filter()之前调用转义方法等http://php.net/manual/en/function.array-filter.php – dogmatic69 2011-02-08 11:07:45
+1有用的评论,谢谢:) – aorcsik 2011-02-08 11:09:24
如果你有一个数组中的东西的列表,你可以使用JOIN来为你构建它。这对于数字值来说是最简单的,因为你不需要引用任何事物。事情是这样的:
$sql = 'SOME QUERY WHERE some_item IN (' . join(',', $a_myData) . ')';
如果阵列包含字符串,你应该为你把数据放入数组逃脱数据。但一旦你做完了,你可以做类似于上面的事情,添加引号。
$sql = 'SOME QUERY WHERE some_item IN ("' . join('","', $a_myData) . '")';
一个潜在的问题是一个空数组,因为上面的例子会给你IN ("")
,这有可能匹配你不想要的东西。
上面的例子也没有考虑NULL值。一种解决方法是用引号已经在其周围的字符串填充你的数组(因此你可以使用NULL
作为它自己的值)。
注意:您可以[格式线为代码(http://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-块)通过缩进它们四个空格。编辑器工具栏中的“{}”按钮可以为您做到这一点。编辑你的问题并尝试一下。单击编辑器工具栏中的橙色问号以获取更多信息和格式化提示。 – outis 2011-04-23 20:04:34