php - 忽略 MySQL 查询中的空“$_POST”值
问题描述
我有三个选择框菜单:
<select name="category" id="category" class="form-control" size="5">
<option value="">Delete</option>
<option value="0">Option 0</option>
<option value="1">Option 1</option>
</select>
<select name="category2" id="category2" class="form-control" size="5">
<option value="">Delete</option>
<option value="0">Option 0</option>
<option value="1">Option 1</option>
</select>
<select name="category3" id="category3" class="form-control" size="5">
<option value="">Delete</option>
<option value="0">Option 0</option>
<option value="1">Option 1</option>
</select>
选定的选项与 ajax 一起发送到服务器端脚本。在这里,我捕获了选定的选项并在 MySQL 查询中使用它们:
$query = "
SELECT * FROM itemSparse
INNER JOIN item
ON item.id = itemSparse.id
LEFT JOIN itemsubtest
ON itemsubtest.subclass = item.Material
INNER JOIN itemModifiedAppearance
ON itemModifiedAppearance.ItemID = itemSparse.id
INNER JOIN ItemAppearance
ON ItemAppearance.identifier = itemModifiedAppearance.ItemAppearanceID
INNER JOIN manifestInterfaceData
ON manifestInterfaceData.ID = ItemAppearance.DefaultIconFileDataID
WHERE 1=1
";
$query.= " WHERE item.ClassID = 4 ";
if(isset($_POST["is_category"]))
{
$query .= " AND item.Material = '".$_POST["is_category"]."'";
}
if(isset($_POST["is_category2"]))
{
$query .= " AND itemSparse.OverallQualityID = '".$_POST["is_category2"]."'";
}
if(isset($_POST["is_category3"]))
{
$query .= " AND itemSparse.StatModifier_bonusStat1 = '".$_POST["is_category3"]."'";
}
问题:
仅当所有三个选择菜单都具有选定值时,查询才有效。如果不是所有三个菜单都有一个选定的选项,则不会显示任何结果。
即使只有一两个选择菜单选择了选项,我也希望显示结果。这意味着应忽略具有空$_POST
值的查询,但应执行其他查询。我该如何处理?
解决方案
最简单的方法是放置WHERE 1=1
子句,这将导致 TRUE。之后,您可以附加任何AND
子句。
$query = "SELECT * FROM table WHERE 1=1 "
if(isset($_POST["is_category"]))
{
$query .= " AND item.Material = '".$_POST["is_category"]."'";
}
if(isset($_POST["is_category2"]))
{
$query .= " AND itemSparse.OverallQualityID = '".$_POST["is_category2"]."'";
}
if(isset($_POST["is_category3"]))
{
$query .= " AND itemSparse.StatModifier_bonusStat1 = '".$_POST["is_category3"]."'";
}
也将其更改为使用准备好的语句,否则查询容易受到 SQL 注入攻击
推荐阅读
- java - Java 检查输入为整数或空以允许默认值
- octave - 八度 - 仅圆一列
- c# - 在 c# 中将 dd/MM/yyyy hh:mm:ss 转换为 dd-MMM-yyyy hh:mm:ss 给出错误:字符串未被识别为有效日期时间
- java - 从 MainActivity 调用位于 Service 中的函数
- python - PyQt5:继承 QTextCodec
- ios - 如何在uiview中添加波浪边框?
- windows - 变量不会在循环的第一次迭代中更新。CMD 批处理
- c# - 如何在 C# 中登录到控制台
- wso2esb - 引起:org.postgresql.util.PSQLException:错误:列“imagesync__c”的类型为布尔值,但表达式的类型为字符变化
- c - 由于长路径导致的 fopen 错误不存在此类文件