PHP - 使用NOT LIKE时mysql查询无法正常工作

时间:2012-03-01 21:02:58

标签: php mysql

我有一个正在构建的查询字符串,当我使用LIKE时它工作正常但是它不适用于NOT LIKE

 $sWhere = "";
    if ( $_GET['sSearch'] != "" )
    {

            $aWords = preg_split('/\s+/', $_GET['sSearch']);
            $sWhere = "WHERE (";

            for ( $j=0 ; $j<count($aWords) ; $j++ )
            {
                    if ( $aWords[$j] != "" )
                    {
                            if(substr($aWords[$j], 0, 1) == "!"){
                                    $notString = substr($aWords[$j], 1);
                                    $sWhere .= "(";
                                    for ( $i=0 ; $i<count($aColumns) ; $i++ )
                                    {
                                            $sWhere .= $aColumns[$i]." NOT LIKE '%".mysql_real_escape_string( $notString )."%' OR ";
                                    }
                            }
                            else{
                                    $sWhere .= "(";
                                    for ( $i=0 ; $i<count($aColumns) ; $i++ )
                                    {
                                            $sWhere .= $aColumns[$i]." LIKE '%".mysql_real_escape_string( $aWords[$j] )."%' OR ";
                                    }
                            }
                            $sWhere = substr_replace( $sWhere, "", -3 );
                            $sWhere .= ") AND ";
                    }
            }
            $sWhere = substr_replace( $sWhere, "", -4 );

有效的代码部分是:

 if(substr($aWords[$j], 0, 1) == "!"){
                                    $notString = substr($aWords[$j], 1);
                                    $sWhere .= "(";
                                    for ( $i=0 ; $i<count($aColumns) ; $i++ )
                                    {
                                            $sWhere .= $aColumns[$i]." NOT LIKE '%".mysql_real_escape_string( $notString )."%' OR ";
                                    }
                            }

如果我删除“NOT”,则查询工作正常但是当我添加NOT时它什么也没做。

谢谢

1 个答案:

答案 0 :(得分:2)

这是因为您在NOT LIKE条件下使用OR

查找column1 NOT LIKE“a”OR column2 NOT LIKE“a”的所有行将匹配所有内容。