php - php搜索过滤器显示所有行而不过滤
问题描述
在显示过滤后的数据时,该 sql 可以按照 $locationone 和 $locationtwo 过滤数据。
但它未能按照$cate过滤数据
我的意思是它显示来自两个位置的所有行并且未能根据科学(主题)过滤它
$cat= "science";
$cate= preg_replace("#[^0-9a-z]#i","", $cat);
$locationone= "dhk";
$locationtwo= "ctg";
preg_replace("#[^0-9a-z]#i","", $locationone);
preg_replace("#[^0-9a-z]#i","", $locationtwo);
$sql= "SELECT * FROM post INNER JOIN user ON post.user_id= user.id
WHERE post.topic LIKE '%$cate%'
AND post.location LIKE '%$locationone%'
OR post.location LIKE '%$locationtwo%'
order by post_id desc";
解决方案
逻辑运算符OR
的优先级低于AND
。所以你需要OR
用括号括起来 ed 条件:
WHERE
post.topic LIKE '%$cate%'
AND (post.location LIKE '%$locationone%' OR post.location LIKE '%$locationtwo%')
没有括号,您的代码相当于:
WHERE
(post.topic LIKE '%$cate%' AND post.location LIKE '%$locationone%')
OR post.location LIKE '%$locationtwo%'
在这里,您可以看到此代码将允许位置'locationtwo'
与topic
.
重要提示:您确实希望在代码中的任何地方都使用准备好的语句和参数化查询,以确保安全性和效率。请参阅这篇文章了解如何进行。
推荐阅读
- javascript - 传递要插入到 div 中的值以打开窗口
- matlab - 处理不平衡的数据集和交叉验证
- sql-server - SQL Server:如何选择按 desc 排序的表中的最后 3 行,然后按 asc 排序?
- arrays - 需要帮助理解这个这个函数
- excel - VBA 宏不再使用 IE 保护模式
- ssl - KeyStore 密码和密钥密码的存储位置
- sql - SQL:在另一列中的两个连续“触发”值之后立即从行开始求和一列
- python-3.x - 如何让步进电机运转
- java - 如何为多个 osgi 服务使用单个配置文件
- python - ValueError:发现样本数量不一致的输入变量:[15996, 8]