2014-09-19 2 views
0

where 조건으로 구성된 SQL에서 결과를 가져와야합니다. 그러나 그것이 어떤 기준을 만족한다면 조건이 실행되는 곳을 확실하게한다.SQL의 IF 문 내의 WHERE 조건

는 I 시도 :

$query = "SELECT m.id, m.message_type, m.message_url, m.user_id, c.type 
      FROM gps_conversation_chat m left join gps_conversation c on m.conversation_id=c.id 
      WHERE m.conversation_id = $conv_id 

      IF c.type=1 THEN 
       AND m.from_message_in != 2 AND m.to_message_in != 2 
      END IF; 

      ORDER BY m.id DESC LIMIT $start, $limit "; 

상기 리턴 에러가 나는 처리 될 IF 조건 필요 즉!

c.type = 1 다음 을 실행 m.from_message_in 경우 = 2 AND m.to_message_in! = 2에 WHERE 조건이 있습니다.

어떻게 수행하나요?

답변

4

if과 같은 것을 사용할 수 없습니다. 그러나이 같은 조건을 정의 할 수 있습니다 : 조건을 중첩하여 원하는 결과를 얻을 수

SELECT m.id, m.message_type, m.message_url, m.user_id, c.type 
FROM gps_conversation_chat m left join gps_conversation c on m.conversation_id=c.id 
WHERE m.conversation_id = $conv_id 
    AND (
     (c.type = 1 AND m.from_message_in != 2 AND m.to_message_in != 2) 
     OR c.type != 1 
    ) 
ORDER BY m.id DESC 
LIMIT $start, $limit; 

알 수 있습니다.



한 가지 더 : 조회에서 (이 기록되는 방법) SQL 주입 공격에 취약 할 수 있습니다. 주제에 대한 설명과이를 막는 방법에 대해서는 take a look here을 참조하십시오.

+0

** SQL 인젝션 공격에 대한 의심의 여지가 있습니다 ** 그는 $ conv_id 일종의 직접적인 변수입니까? –

+1

@Suganthan 직접 사용되는 모든 변수는 SQL 주입 공격에 대한 액세스 지점이 될 수 있습니다. 준비된 문 사용 – Barranka