我有一个2字段表单来选择某些产品的类别和供应商:
<input type="checkbox" name="category[]" value="<?php echo $categories_id?>"/>
<input type="checkbox" name="supplier[]" value="<?php echo $produttori_id?>"/>
WHILE循环中提供了许多类别和供应商。
在提交的页面中,我创建了这两个循环以获取所有选定的类别和供应商:
if(!empty($_POST['category'])) {
foreach($_POST['category'] as $check) {
echo $check;
echo "<br>";
}
}
和
if(!empty($_POST['supplier'])) {
foreach($_POST['supplier'] as $check) {
echo $check;
echo "<br>";
}
}
现在我必须进行查询以仅选择两个数组中包含的记录:
SELECT * FROM PRODUCTS WHERE supplier [is in the supplier array] AND category [is in the category array]
我怎样才能做到这一点?
答案 0 :(得分:2)
您可以使用SQL运算符IN和PHP函数implode,array_map和intval来完成此操作。 intval用于防止sql注入攻击。
if(!empty($_POST['category']) && !empty($_POST['supplier'])) {
$categories = implode(",", array_map('intval', $_POST['category']));
$suppliers = implode(",", array_map('intval', $_POST['supplier']));
$sql = "SELECT * FROM PRODUCTS WHERE supplier IN (" + $suppliers + ") AND category IN (" + $categories + ")";
//use the sql
//show results
}
答案 1 :(得分:2)
您可以使用php函数implode
'SELECT * FROM PRODUCTS WHERE supplier in ('.implode(',', $_POST["supplier"]).' ) AND category in ('.implode(',', $_POST["category"]).')
但首先验证输入以防止sql注入
答案 2 :(得分:1)
您可以使用本机mysql函数IN()来实现此目的。 有了它你可以查询像
这样的东西WHERE supplier IN('supplier1','supplier2','supplier3')
因此,在您的示例中,它看起来像这样:
'SELECT * FROM PRODUCTS WHERE supplier IN('.implode(',', $_POST['supplier']).')'
答案 3 :(得分:1)
请看一下这篇文章。我想你是想找出类似这样的东西Mysql where id is in array