我必须遵循以下情况:我正在制作搜索页面。搜索页面填充了MySQL select查询选择框。因此,复选框的名称类似于name="name[]"
。
为了告诉你我在做什么,我将包括一张图片:
因此,如果我要查看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个或多个选项?
非常感谢你们!
答案 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,然后选择该列中的所有内容。意思是,它会导致一切。
我希望有人能很好地利用它!