用复选框和内爆数组构建Mysql查询


Building a Mysql Query With Check Boxes and Imploded Arrays

我试图建立一个mysql查询使用搜索,利用复选框,下拉菜单等。下拉菜单和文本字段工作得很好,因为它们只处理列中可能存在的一个值,但是复选框在开始复制数据时变得棘手。例如,这是我目前拥有的代码。

$where = array();
if(isset($_GET['cardname'])){
    if($_GET['cardname']==''){
    $card_name = mysql_real_escape_string($_GET['cardname']);
    } else{
    $card_name = mysql_real_escape_string($_GET['cardname']);
    $where[] = "card_name = '".mysql_real_escape_string($card_name)."'";
    }
}
if (isset($_GET['card_set'])){
    if($_GET['card_set']==''){
    } else {
    $set_name = $_GET['card_set'];
    $where[] = "card_set = '".mysql_real_escape_string($set_name)."'";
    }
}
//Rarity
if (isset($_GET['mythic'])){
    $mythic = $_GET['mythic'];
    $where[] = "rarity IN = '".mysql_real_escape_string($mythic);
    }
if (isset($_GET['rare'])){
    $rare = $_GET['rare'];
    $where[] ="rarity IN = '". mysql_real_escape_string($rare);
}
if(count($where)) {
    $query.= 'SELECT * FROM inventory WHERE '.implode(' AND ', $where);
}

我试图建立一个查询如下:

SELECT * FROM inventory WHERE card_name = '$card_name' AND '$card_set' = $card_set AND rarity IN = 'r','u';

你会注意到在sql语句中'稀有性'是对两个值,R和u检查。我遇到的问题是,我无法弄清楚如何内爆我的数组,而不写'稀有性'到sql语句的每次复选框被选中。例如,当我在两个复选框被选中的情况下运行代码时,我会得到如下结果:

SELECT * FROM inventory WHERE card_name = 'Black ' AND card_set = '4E' AND rarity = ('M') AND rarity = ('R')

而我真正需要的是这个

SELECT * FROM inventory WHERE card_name = 'Black ' AND card_set = '4E' AND rarity = ('M','R')

如有任何帮助,不胜感激。

亲切的问候酸杰克

你需要将这些复选框存储在不同的数组中,然后一次使用它们

IN不使用=,它被写成"column IN (val, val)"

//Rarity
$whereIn = array();
if (isset($_GET['mythic'])){
    $mythic = $_GET['mythic'];
    $whereIn[] = mysql_real_escape_string($mythic);
    }
if (isset($_GET['rare'])){
    $rare = $_GET['rare'];
    $whereIn[] = mysql_real_escape_string($rare);
}
if(!empty($whereIn)) {
    $where[] ="rarity IN ( '". implode("','", $whereIn) . "')'";
}