php
  • mysql
  • operators
  • operator-precedence
  • 2010-10-08 57 views 1 likes 
    1

    假设我用2 AND和一个OR检索结果,与name输入文本值第一次测试,我能得到正确的结果,但是当我改变$getc为任意值以外空字符串,结果不变,它只查询name的值。哪里不对?AND,OR输出错误的结果

    $query1 = "SELECT * FROM $tableName WHERE name LIKE '%$asd%' OR descriptions LIKE 
        '%$asd%' AND category='$getc' AND company_type='$dsp' LIMIT $start, $limit"; 
    

    回答

    8

    尝试把()围绕name LIKE '%$asd%' OR descriptions LIKE '%$asd%'

    $query1 = "SELECT * FROM $tableName WHERE (name LIKE '%$asd%' OR descriptions LIKE '%$asd%') AND category='$getc' AND company_type='$dsp' LIMIT $start, $limit"; 
    

    它说categorycompany_type必须比赛和至少一个namedescriptions必须匹配。

    原因:

    a OR b AND c AND d 
    

    被视为以下为AND是具有较高precedenceOR

    a OR (b AND c AND d) 
    

    ,但你想要的是:

    (a OR b) AND c AND d 
    
    +0

    奇怪的是,我仍然在发布此问题之前,在放置一个括号后得不到结果。 – proyb3 2010-10-08 11:09:57

    +0

    好吧,我设法使它正确使用!empty()验证每个参数并将它们添加到mysql语句中,如果有值。 – proyb3 2010-10-08 11:41:02

    +0

    是的,谢谢,但我没有帐户。我在mysql中经历过,有时候太多的代码会让我的大脑变得不合时宜。 – proyb3 2010-10-08 11:58:29

    相关问题