2009-12-15 1 views
0

와일드 카드를 사용하면 모든 레코드가 일치합니다.MySQL에서 instr()에 와일드 카드를 적용하는 방법은 무엇입니까?

내 코드 :

if(empty($tag)) 
{ 
$tag="%"; 
} 

mysql_query("select * from mytable where instr(tag,'$tag')>0") or die(mysql_error()); 

그러나 제로 결과를 반환합니다. 에도

if(empty($tag)) 
    { 
    $tag="*"; 
    } 

경우 여전히 제로 결과를 반환합니다. 이 문제를 해결하는 방법?

답변

1

INSTR 와일드 카드를 지원하지 않습니다이 처리하는 일반적인 방법은 그에 따라 SQL을 수정하는 것입니다.

당신이 MySQL의 쿼리에서 와일드 카드를 사용하려는 경우, 즉 LIKE 또는 REGEXP, 등을 지원하는 기능을 사용해야합니다 :

mysql_query("select * from mytable where tag LIKE '%$tag%'") 

위의 쿼리가 어떤 가치를 작동합니다 $tag입니다. 공백 값 (빈 문자열)은 모든 레코드를 반환합니다. $tag 값을 제대로 살균하십시오.

0

우선, instr (및 그 대응 물인 locate)은 와일드 카드 또는 기타 특수 표현식 전용 리터럴 문자열을 인식하지 못합니다.

if (empty($tag)) 
    $whereclause = ""; // match all records 
else $whereclause = "where instr(tag, '$tag') > 0"; 

mysql_query("select * from mytable $whereclause") or die(mysql_error()); 
관련 문제