用于搜索的SQL设置

时间:2015-05-12 17:19:52

标签: php mysql

我希望能够通过选中复选框来搜索各个制造商,我该怎么做?

如果他们选择7来搜索如何使用sql字符串现在我必须像LIKE '%BMW'那样手动输入它,但我希望它来自循环:

if(!empty($_POST['check_list'])) {
    // Loop to store and display values of individual checked checkbox.
    foreach($_POST['check_list'] as $selected) {
        echo $selected."</br>";
    }
}

$sql = "SELECT * FROM `Cars` WHERE `manufacturer` LIKE '%BMW' OR 
        `manufacturer` LIKE '%Audi' ORDER BY `tier` ASC";

2 个答案:

答案 0 :(得分:2)

通常当您使用复选框缩小范围时,例如在亚马逊中,他们不会使用通配符。在这种情况下,您可能最好为制造商列表dnvm list

global.json

在这种情况下,要在PDO预处理语句中使用,您不需要循环。只需使用array_fill和implode()生成占位符,然后在execute()中绑定数组。

WHERE IN

如果SELECT * FROM `Cars` WHERE `manufacturer` IN ('BMW', 'Audi', 'Mercedes', 'Lexus', 'Cadillac', 'Huffy Bikes'); 中有奥迪宝马$placeholders = array_fill(0, count($_POST['check_list']), '?'); $pdo->prepare('SELECT * FROM `Cars` WHERE `manufacturer` IN ('.implode(',' $placeholders).')'); $stmt->execute($_POST['check_list']); 将输出$_POST['check_list'] pdo :: execute()会将每个占位符(implode(',', $placeholders))与相应的值绑定。

答案 1 :(得分:0)

假设我们在$ _POST ['check_list']数组中有制造商的名称。

您可以简单地将该名称连接到变量中,并使用它来构建查询。要构建查询,最简单的方法是使用IN运算符,而不是类似运算符。 代码应该是:

$query = "SELECT * FROM `Cars` WHERE `manufacturer` IN (".implode(",",$_POST['check_list']).")";

这应该可行,但会产生安全问题(sql注入)。 要以正确的方式做事,你应该使用一个数组,其中包含制造商名称和每个的ID,如:

$manufacturers = array( 1 => "BMW", 3 => "Renault", 4 => "Ferrari");

你可以从这个数组创建一个dinamically复选框:

foreach($manufacturers as $id => $name) {
    echo '<label><input type="checkbox" name="check_list[]" value="'.$id.'>'.$name.'</label>';
}

而且,在查询部分中,您必须循环到$ _POST ['check_list'](现在包含数字ID)并分配给临时数组,您需要在查询中插入的制造商名称< / p>

$manif_to_select = array();
foreach($_POST['check_list'] as $manif_id) {
    if(!isset($manufacturers[$manif_id]))
        continue;

    $manif_to_select[] = $manufacturers[$manif_id];
}
$query = "SELECT * FROM `Cars` WHERE `manufacturer` IN (".implode(",",$manif_to_select).")";