2011-10-25 2 views
0

"and table.field = '$ filter'또는 table.field = '$ otherfilter'"를 삭제하면 아래 쿼리가 올바르게 작동합니다. 이 부분을 추가하면 볼 수있는 권한이없는 사람들에게 결과가 표시됩니다. 필자는 필터링 된 결과를 보여주기 위해 그 부분을 확실히 추가해야합니다.이 쿼리가 필터를 무시하는 이유는 무엇입니까?

코드 'otherfilter $'와 table.field = '$ 필터'OR table.field = : 나는 그래서 나에게 올바른 사용 결과를 보여줍니다이의 구조를 어떻게

//$filter = "23943409" 
    $filter2 = "$username"; 


    $sql = "SELECT table.field, table2.field, table.field, table.field, 
    table.field, table.field, table.field FROM table 
    LEFT JOIN table2 ON table.field = table2.field 
    WHERE table.field='$id' and table.field='$id' 
    and table.field = '$filter' OR table.field='$otherfilter' 
    ORDER BY table.id DESC LIMIT 0, 3"; 

    $result=mysql_query($sql); 

    $query = mysql_query($sql) or die ("Error: ".mysql_error()); 

    if ($result == "") 
    { 
    echo ""; 
    } 
    echo ""; 


    $rows = mysql_num_rows($result); 

    if($rows == 0) 
    { 
    print(""); 

} 
elseif($rows > 0) 
{ 
while($row = mysql_fetch_array($query)) 
{ 

$field = $row['field']; 

print("$field"); 
} 

} 
+1

귀하는 $ filter를 (를) 주석 처리 했으므로이 변수는 비어 있습니다. 따라서 쿼리는 다음과 같이됩니다. table.field = '' – bart

답변

1

AND (table.field = '$filter' OR table.field = '$otherfilter')을보십시오. 절 주변의 괄호에 유의하십시오. 나는 당신이 코드를 모호하게 만들고 실제 필드 이름을 "필드"로 대체했다고 가정합니다.

+0

재미있는 점은 다른 곳에서는 제대로 작동하지만 기회는 취하지 않는다는 것입니다. evertyhwere에 제안을 추가하면 이것을 사용합니다. – AAA

1

당신은 당신의 필터 괄호를 배치해야합니다 :

AND (table.field = '$filter' OR table.field='$otherfilter') 

그렇지 않으면 당신의 논리가 꺼져 있습니다.

1

table.field=$id AND table.field = $filter 인 "필드는 사과입니다. 필드는 주황색입니다. 다행스럽게도 테이블/필드 이름을 모호하게 만드는 게으른 게 아니라면이 두 값에 대해 동일한 table.field 콤보를 사용하는 경우 하나의 레코드 필드가 두 개 이상의 값을 가질 수 없기 때문에 모든 레코드를 제외 할 것입니다. 시간.

+0

그냥 난독 화. – AAA

1

아마도 andor 사이의 우선 순위 문제를 처리하고있을 것입니다. 시도해보십시오 :

"SELECT table.field, table2.field, table.field, table.field, 
    table.field, table.field, table.field FROM table 
    LEFT JOIN table2 ON table.field = table2.field 
    WHERE table.field='$id' and table.field='$id' 
    and (table.field = '$filter' OR table.field='$otherfilter') 
    ORDER BY table.id DESC LIMIT 0, 3 
관련 문제