mysql使用内爆值选择查询

时间:2015-12-23 17:01:38

标签: php mysql pdo

我必须遵循以下情况:我正在制作搜索页面。搜索页面填充了MySQL select查询选择框。因此,复选框的名称类似于name="name[]"。 为了告诉你我在做什么,我将包括一张图片:

Picture

因此,如果我要查看1个可用性 - 比如周 - 查询将完美运行。但是,如果我选择2个可用性,则只显示具有两个可用性的模型,而不是具有两个可用性之一的每个模型。 这是我的代码:

HTML:

    $return2 = $tafel->query("SELECT DISTINCT whenpossible FROM models where arttype LIKE 'Model%'");
    while($row1 = $return2->fetch(PDO::FETCH_ASSOC)){ 
    $whenp = $row1['whenpossible'];
    <input type="checkbox" name="when[]" value="<?= $whenp ?>"><span class="box2"><?= $whenp ?></span>

PHP:

if (!empty($_POST['gender'])) {
$genders = $_POST['gender'];
$gender = implode(",",$genders);
} else {
$gender = "%";
}

$select = $tafel->prepare("SELECT * FROM models 
    WHERE whenpossible LIKE :when");
$select->bindParam(':when', $when, PDO::PARAM_STR);
$select->execute();

有没有人知道如何解决这个问题,以便我可以选择1个或多个选项?

非常感谢你们!

2 个答案:

答案 0 :(得分:0)

在代码中构建错误的SQL命令。

对于您的示例,SQL是

SELECT * FROM table WHERE field LIKE '%value1,%value2'

这是错误的代码。正确的代码可以是

SELECT * FROM table WHERE field LIKE '%value1' OR field LIKE '%value2'

您应该重写代码以构建正确的SQL

答案 1 :(得分:0)

对于那些感兴趣或面临同样问题的人,可以回答:

如果IN或FIND_IN_SET不适合您,您可以试试这个。

像这样破坏你的价值:

if (!empty($_POST['VALUE'])) {
$value = $_POST['VALUE'];
$valueimplode = implode('|', $value)
} else {
$value = 'somethingelse'
}

|对SQL函数非常重要。它就像OR一样。 SQL如下:

$query = $db->prepare("SELECT * FROM table WHERE column REGEXP(:valueimplode)");
$query->bindParam(':value', $valueimplode, PDO::PARAM_STR);
$query->execute();

您将找到所需的所有结果。

如果您有空值,则可以执行以下操作:

if (!empty($_POST['VALUE'])) {
$value = $_POST['VALUE'];
$valueimplode = implode('|', $value)
} else {
$value = '%' <-- Wildcard, means EVERYTHING!!!
}

那么SQL就像这样:

$query = $db->prepare("SELECT * FROM table WHERE (column REGEXP(:valueimplode) OR column LIKE :value)");
$query->bindParam(':value', $valueimplode, PDO::PARAM_STR);
$query->execute();

%不能与REGEXP一起使用,因此它将转到LIKE,然后选择该列中的所有内容。意思是,它会导致一切。

我希望有人能很好地利用它!