在php中组合两个不同数组的记录

时间:2017-04-19 14:02:43

标签: php mysql arrays

我有一个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]

我怎样才能做到这一点?

4 个答案:

答案 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