使用LIKE的MYSQL查询

时间:2014-07-28 03:57:12

标签: php mysql

我试图使用PHP来查询MYSQL以获得一些完全匹配和一些部分匹配。以下代码为我提供了所有字段的完美匹配:

$results= mysql_query ("SELECT * 
                          FROM companyinfo 
                         WHERE id='$Companyid' 
                            OR companyname='$Companyname' 
                            OR contactname='$Contactname' 
                            OR address1='$Address1' 
                            OR city ='$City' 
                            OR primaryphone='$Primaryphone' 
                            OR email='$Email'")

我希望能够对公司名称进行部分搜索。使用以下代码可以实现此目的,除非它弄乱了所有其他搜索字段。

$results= mysql_query ("SELECT * 
                          FROM companyinfo 
                         WHERE id='$Companyid' 
                            OR companyname LIKE '%{$Companyname}%'
                            OR contactname='$Contactname' 
                            OR address1='$Address1' 
                            OR city ='$City' 
                            OR primaryphone='$Primaryphone' 
                            OR email='$Email'")

任何人都有任何提示?

2 个答案:

答案 0 :(得分:0)

我在这里稍微阅读了你的问题,但我很确定$Companyname是空的,留下你的查询:

SELECT * 
FROM companyinfo 
WHERE id='20' 
OR companyname LIKE '%%'
OR ...

WHERE companyname LIKE '%%'匹配任何非空;使所有其他OR条件都没有实际意义。您需要设置$Companyname为空的特殊情况,或者只是在谓词中不包含未使用的搜索条件。


当然,这就是假设OR真的是你在这里做的意思。在我完成的大多数搜索中,假定的UX已经匹配我指定的所有条件,而不是任何任何唯一适用的时间是单个搜索输入,您的情况显然不是。

我还应该包括必须的“你的查询受SQL注入。停止将显然用户输入的内容放入动态查询中,并使用参数代替。”这里也有评论。

答案 1 :(得分:-2)

SELECT * FROM companyinfo 
WHERE id LIKE '%$Companyid%' OR companyname LIKE '%$Companyname%' OR address1 LIKE '%$address1%' OR city LIKE '%$city%' OR primaryphone LIKE '%$primaryphone%'OR email LIKE '%$email%';