在同一查询中使用 OR 和 AND 查询问题
Posted
技术标签:
【中文标题】在同一查询中使用 OR 和 AND 查询问题【英文标题】:Query issue using OR and AND within the same query 【发布时间】:2017-06-30 14:20:13 【问题描述】:我希望创建一个简单的查询,以显示类别 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 只是让注射变得有点困难。
【参考方案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";
【讨论】:
以上是关于在同一查询中使用 OR 和 AND 查询问题的主要内容,如果未能解决你的问题,请参考以下文章
关于在同一查询中使用@eq 和@paginate 进行数据搜索的问题