【问题标题】:Query issue using OR and AND within the same query在同一查询中使用 OR 和 AND 查询问题
【发布时间】:2023-03-18 17:09:01
【问题描述】:

我希望创建一个简单的查询,以显示类别 ID 与数据库中的“类别”或“类别_2”列同时匹配品牌的所有产品。

我需要在同一个查询中使用 OR 和 AND。

这是我当前运行良好的查询:

$all="SELECT * FROM models WHERE category = " . $category['id'] . " AND brand = ". $brand_name['id'] ." ORDER BY year DESC, month DESC";

这就是我想要达到的目标:

$all="SELECT * FROM models WHERE category = " . $category['id'] . " OR category_2 = " . $category['id'] . " AND brand = ". $brand_name['id'] ." ORDER BY year DESC, month DESC";

但是,对于新查询,我所做的 AND 品牌部分不起作用。

【问题讨论】:

  • 您的代码容易受到 SQL 注入的攻击。请学会使用prepared statements
  • WHERE categoryID IN (category, category_2) ...
  • @tereško 如果不是用户输入而是先前选择的结果,则不是。
  • 检查我的答案
  • @vaso123 只是让注射变得有点困难。

标签: php mysql sql mysqli


【解决方案1】:

这很容易发生sql注入你应该使用mysqli。试试这个方法:

$query = "SELECT column1,column2,column 3 FROM models WHERE (category = ? OR categeory_2 = ?) AND brand_name = ? ORDER BY year DESC, month DESC";
$stmt = $conn->prepare($query);
$stmt->bind_param("sss",$category['id'],$category['id'],$band_name['id']);
$stmt->execute();
$stmt->bind_result($col1,$col2,$col1);
$stmt->fetch();

【讨论】:

    【解决方案2】:

    你需要对你的逻辑进行分组:

    $all="SELECT * FROM models 
    WHERE (category = " . $category['id'] . " OR category_2 = " . $category['id'] . ")
    AND brand = ". $brand_name['id'] ." ORDER BY year DESC, month DESC";
    

    【讨论】:

      【解决方案3】:

      尝试添加()

      $all="SELECT * 
      FROM models 
      WHERE (category = " . $category['id'] . " OR category_2 = " . $category['id'] . ")
      AND brand = ". $brand_name['id'] ." 
      ORDER BY year DESC, month DESC";
      

      【讨论】:

        【解决方案4】:

        您需要做的就是在 OR 条件周围放置括号。

        $all="SELECT * FROM models WHERE (category = " . $category['id'] . " OR category_2 = " . $category['id'] . ") AND brand = ". $brand_name['id'] ." ORDER BY year DESC, month DESC";
        

        【讨论】:

          【解决方案5】:

          只需将您的 or 条件放在 brackets 中,这样它们就会被摸索并可以被视为单个条件,然后 AND 带有第二个条件

          $all="SELECT * FROM models 
          WHERE (category = " . $category['id'] . " OR category_2 = " . $category['id'] . ")
          AND brand = ". $brand_name['id'] ." ORDER BY year DESC, month DESC";
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-03-09
            • 1970-01-01
            相关资源
            最近更新 更多