PHP MYSQL类查询不起作用
我的数据库中有一个表: 表格产品:PHP MYSQL类查询不起作用,php,mysql,Php,Mysql,我的数据库中有一个表: 表格产品: id | name | type | stock | code | etc | 1 | pan | ready | 0 | A23 | ome | 2 | ipad | pre | 0 | B55 | tow | 3 | mouse| stock | 5 | C33 | ter | mysql查询: $key = $_GET["key"]; $searchTermBits[] = " name LIKE
id | name | type | stock | code | etc |
1 | pan | ready | 0 | A23 | ome |
2 | ipad | pre | 0 | B55 | tow |
3 | mouse| stock | 5 | C33 | ter |
mysql查询:
$key = $_GET["key"];
$searchTermBits[] = " name LIKE '%".$key."%' or code LIKE '%".$key."%' or etc LIKE '%".$key."%' and type != 'pre' and stock! ='0' ";
输出:当搜索关键字“tow”时 为什么结果仍然显示第2条记录
$searchTermBits[] = " code LIKE '%".$key."%' and type != 'pre' and stock! ='0' ";
结果是正确的。和运算符具有更高的优先级,这意味着您的查询与
(name like '%a%') or (name like '%b%')
or (name like '%c%' and type != 'pre' AND stock != 0)
因此,附加条件仅适用于第三种或情况。要使查询的行为符合您的要求,请使用括号:
" (name LIKE '%".$key."%' or code LIKE '%".$key."%' or etc LIKE '%".$key."%')
and type != 'pre' and stock! ='0' "
BTW,如果<代码> $KEK/COD>来自不可信的源(例如来自用户的任何类型的输入),考虑使用占位符代替准备语句。
考虑到您提供的稀少信息,我认为Cthulhu有正确的答案。另外,如果我们考虑你提供的代码,我会给你建议。 因为AND运算符具有更高的优先级,所以查询的最后一次比较为“FALSE或TRUE”,结果为TRUE。如果要更改优先级,可以使用如下括号
" (name LIKE '%".$key."%' or code LIKE '%".$key."%' or etc LIKE '%".$key."%') and type != 'pre' and stock !='0' ";
对于关键字“tow”,此查询返回false您试图通过查询得到什么?我试图理解这个问题,以帮助您构建查询。我试图从表中获取所有字段,在本例中,$key是“tow”$key=$\u get[“key”];这样的话:“从tableName中选择*,其中的名称类似“%”。key。“%”和类型!='pre'和stock!='0'”?如果你能解释一下什么方法具有更高的优先级,那就太好了。巴哈哈,这就是问题所在,()天哪,我没意识到,谢谢兄弟