Php 为什么查询显示结果,但大多数参数值都是错误的?

Php 为什么查询显示结果,但大多数参数值都是错误的?,php,mysql,sql,mysqli,Php,Mysql,Sql,Mysqli,我想非常谦虚地问一下,我的两个查询显示了不同的结果。在这两个查询中,我都传递了两个错误的值(city id和state it),但在执行时,查询仍然显示返回一行。下面是显示行的查询,我希望它不应该显示行 select * from `companies` where `city_id` = 3 and `state_id` = 4 and `company_name` LIKE '%en%' or `company_email` LIKE '%en%' or `company_profile

我想非常谦虚地问一下,我的两个查询显示了不同的结果。在这两个查询中,我都传递了两个错误的值(city id和state it),但在执行时,查询仍然显示返回一行。下面是显示行的查询,我希望它不应该显示行

select * from `companies` where `city_id` = 3 and `state_id` = 4 and 
`company_name` LIKE '%en%' 
or `company_email` LIKE '%en%'
or `company_profile` LIKE '%en%'
order by `company_name` asc
下面的查询没有显示任何行,这是预期的结果,因为传递了错误的值

select * from `companies` where `city_id` = 3 and `state_id` = 4 and 
`company_name` LIKE '%en%' 
or `company_email` LIKE '%en%'
order by `company_name` asc
这两个查询的唯一区别是like子句

or `company_email` LIKE '%en%'

有人能告诉我为什么会这样吗。我想感谢你。如果我犯了任何错误,我很抱歉。

你把
混在一起的方式表明你没有完全意识到他们的错误
的优先级高于
,因此您的查询等同于:

where (
    `city_id` = 3
    and `state_id` = 4
    and `company_name` LIKE '%en%' 
)
or `company_email` LIKE '%en%'
or `company_profile` LIKE '%en%'

我想你唯一的匹配是因为你把
混在一起的方式和
表明你没有完全意识到他们的关系
的优先级高于
,因此您的查询等同于:

where (
    `city_id` = 3
    and `state_id` = 4
    and `company_name` LIKE '%en%' 
)
or `company_email` LIKE '%en%'
or `company_profile` LIKE '%en%'

我想你唯一的匹配是由于公司简介,让我重新表述一下。正如所指出的,并且比OR具有更大的优先级,但是,如果AND条件没有返回结果,并且任何OR条件返回,OR将接管您编写的所有其他内容

截至,如果设置的和条件返回结果,则或条件将被忽略

要使它像(显然)应该的那样工作,您需要这样做:

select 
    * 
from 
    `companies` 
where 
    `city_id` = 3 
and 
    `state_id` = 4 
and (
    `company_name` LIKE '%en%' 
    or `company_email` LIKE '%en%'
    or `company_profile` LIKE '%en%'
)
order by `company_name` asc

让我换个说法。正如所指出的,并且比OR具有更大的优先级,但是,如果AND条件没有返回结果,并且任何OR条件返回,OR将接管您编写的所有其他内容

截至,如果设置的和条件返回结果,则或条件将被忽略

要使它像(显然)应该的那样工作,您需要这样做:

select 
    * 
from 
    `companies` 
where 
    `city_id` = 3 
and 
    `state_id` = 4 
and (
    `company_name` LIKE '%en%' 
    or `company_email` LIKE '%en%'
    or `company_profile` LIKE '%en%'
)
order by `company_name` asc

我猜你想从
公司
中选择这样的东西,其中
城市id
=3和
州id
=4和(
公司名称
像“%en%”或
公司电子邮件
像“%en%”或
公司简介
像“%en%”)按
company\u name
asc订购您需要在或零件周围加括号。@jarlh非常感谢,您能给我举个例子看看@ViktarPryshchepa的评论吗!我猜你想从
公司
中选择这样的东西,其中
城市id
=3和
州id
=4和(
公司名称
像“%en%”或
公司电子邮件
像“%en%”或
公司简介
像“%en%”)按
company\u name
asc订购您需要在或零件周围加括号。@jarlh非常感谢,您能给我举个例子看看@ViktarPryshchepa的评论吗!非常感谢,它正在工作。我想感谢你与我分享知识。非常感谢你,它正在发挥作用。我想感谢你与我分享知识。对不起,这是另一种方式:该死的:D我想了些什么,写了些什么。对不起,这是另一种方式:该死的:D我想了些什么,写了些什么。