gpt4 book ai didi

php - 根据变量改变mysql查询

转载 作者:行者123 更新时间:2023-11-29 06:22:04 25 4
gpt4 key购买 nike

所以我正在制作一个基于点击的搜索工具。没什么特别的,只要您从所有可用类别中至少选择一件东西,它就会很好用。我想更改它,以便没有强制类别可供选择,所以如果我只想从类别 cpu 中选择,那么也会给出结果。

这是我的输入:

<form action="search.php" method="GET"> 
<input value="i3" name="cpu[]" type="checkbox">i3
<input value="i5" name="cpu[]" type="checkbox">i5 <br>
<input value="4gb" name="ram[]" type="checkbox">4gb
<input value="8gb" name="ram[]" type="checkbox">8gb<br>
<input value="1tb" name="storage[]" type="checkbox">1TB
<input value="500gb" name="storage[]" type="checkbox">500GB<br>
<input type="submit" value="search" class="submit" />

这是收集点击复选框的部分(我省略了 cpu 和 ram 部分,因为它们相同):

if(isset($_GET['storage'])){
if (is_array($_GET['storage'])) {
foreach($_GET['storage'] as $storage_value){
$storage_term = trim($storage_value);
$storage_term_array[] = $storage_term;
if (!empty($storage_term)) {
$storage_bits[] = "`storage` LIKE '%$storage_term%'";
}
} } }
else $storage_bits="0";

mysql_query 是这样的:

$res=mysql_query("SELECT * FROM laptop WHERE 
(".implode(' OR ', $cpu_bits).")
AND (".implode(' OR ', $ram_bits).")
AND (".implode(' OR ', $storage_bits).")
AND visibility=1");

这是它返回的内容:

(`cpu` LIKE '%i5%') AND (`ram` LIKE '%8gb%') AND (`storage` LIKE '%1tb%' OR `storage` LIKE '%500gb%')

这是有效的代码,但正如我之前所说,您需要为每个类别至少选择 1 个复选框。我如何完全排除 AND (".implode(' OR ', $storage_bits)." 部分 if $storage_bits="0"?

到目前为止,我还没有遇到 case

$res=mysql_query("SELECT * FROM laptop WHERE 
(".implode(' OR ', $cpu_bits).")
AND (".implode(' OR ', $ram_bits).")
(case when ($storage_bits=0) THEN 'AND 1=1' ELSE 'AND (".implode(' OR ', $storage_bits)."' END )
AND visibility=1");

甚至 IF 都不适合我。

$res=mysql_query("SELECT * FROM laptop WHERE 
(".implode(' OR ', $cpu_bits).")
AND (".implode(' OR ', $ram_bits).")
IF($storage_bits=0,'1=1','AND (".implode(' OR ', $storage_bits).")
AND visibility=1");

它没有给我任何语法错误,只是没有给出结果。是什么赋予了?我觉得我遗漏了一些引号或类似的可怜的东西,但我似乎无法理解它。谢谢!

最佳答案

试试这个:

$whereClause = "WHERE visibility = 1";
if($cpu_bits != '0'){
$whereClause .= " AND (".implode(' OR ', $cpu_bits).")";
}
if($ram_bits != '0'){
$whereClause .= " AND (".implode(' OR ', $ram_bits).")";
}
if($storage_bits != '0'){
$whereClause .= "AND (".implode(' OR ', $storage_bits).")";
}
$res=mysql_query("SELECT * FROM laptop".$whereClause);

这样做是为了防止空字段出现在 where 子句中。

关于php - 根据变量改变mysql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32865917/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com