首页 > 解决方案 > 忽略 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值的查询,但应执行其他查询。我该如何处理?

标签: phpmysql

解决方案


最简单的方法是放置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 注入攻击


推荐阅读