我有一个正在构建的查询字符串,当我使用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时它什么也没做。
谢谢
答案 0 :(得分:2)
这是因为您在NOT LIKE条件下使用OR
。
查找column1 NOT LIKE“a”OR column2 NOT LIKE“a”的所有行将匹配所有内容。