2014-01-16 4 views
0

해당 쿼리 중 하나에 다음 WHERE 절이있는 응용 프로그램이 있습니다."like '%%'"에 대한 쿼리의 목적은 무엇입니까?

WHERE objId = 5 AND (field1 like '%%' OR field2 like '%%' OR field3 like '%%') 

의 MySQL의 EXPLAIN 기능을 사용하여, 그것은 필요 이상으로 행 (다행히 objId에 인덱스 행의 많은 필터링)을 찾고있을 것 같지 않지만, 필드인지 여부를 확인하는 점은 무엇입니까 %%을 좋아하세요?

+7

정말 세 가지 필드 중 하나가 'null'이 아닌지 확인하는 방법이 좋지 않습니까? – LittleBobbyTables

+1

"%%"를 사용하여 같은 명령문을 사용하여 쿼리하는 것은 아닙니다. "%"를 사용하는 것과 같습니다. –

답변

8

내 생각에이 SQL을 생성하는 스크립트는 % 사이에 몇 가지 변수가 있지만 비어있어서 출력이 %%입니다. 간단히

:

$var = ''; 
$sql = "... field LIKE '%" . $var . "%' OR ..."; 
+0

합리적인 상황 인 것처럼 들리지만 더 자세히 살펴보면 쿼리가 이와 같이 생성됩니다. – MxyL

+1

바라건대 .. 단지 SQL 코드 삽입을 허용 할 가능성이 높습니다. – odedsh

+0

상황이 적당 할 수도 있지만 디자인 패턴이 ;-) – hsz

5

like '%%'/like '%' 같은 비어있는 상태입니다.

WHERE objId = ? AND (field1 like '%?%' OR field2 like '%?%' OR field3 like '%?%')

그리고 당신은 단지 실제 필터 값없이 보낼 일이 ... (모두를위한 빈 문자열 :

코드 뒤에 뭔가처럼 가능성이 높습니다 (NULL을 제외한 모든 값을 받아) 필터 조건)

관련 문제