2011-09-13 3 views
0

'like'문을 포함하는 쿼리에 문제가 있습니다. 여기 'Like'쿼리와 관련된 MySQL 문제

내 코드입니다 :

function get_number_of_locations_by_zip_tag($zip, $tag) 
{ 
     global $db; 
     $query = "SELECT * FROM location WHERE zip = :zip AND disabled = 0 AND (tags LIKE :tag OR name LIKE :tag) LIMIT :start, :number"; 

     $statement = $db->prepare($query); 
     $statement->bindValue(':zip', $zip); 
     $statement->bindValue(':tag', '%'.$tag.'%', PDO::PARAM_STR); 
     $statement->execute(); 
     $locations = $statement->fetchAll(); //fetch(); 
     $statement->closeCursor(); 
     return $locations; 
} 

내가 태그가 '이름'또는 '태그'필드 중 하나와 일치하는 행을 반환하는 쿼리를 기대하고있어, 대신 그것은 단지 행 어디를 반환합니다 태그가 일치합니다.

I가 쿼리를 전환하는 경우 :

$query = "SELECT * FROM location WHERE zip = :zip AND disabled = 0 AND (name LIKE :tag OR tags LIKE :tag) LIMIT :start, :number"; 

, 결과는 단지 이름 필드가 일치하는 행을 반환 할 경우, 반대, 그리고 태그 필드를 무시합니다.

아무도이 쿼리에 잘못된 것이 있습니까? 그것은 내가 개발을 시작할 때 Windows의 XAMPP 서버에서 기대했던대로 작동하지만, LAMP 서버로 모든 것을 전환하면이 쿼리가 더 이상 올바르게 작동하지 않습니다. 어떤 도움에 감사드립니다

,

당신은 변경할 수 있습니다
+0

[게시물에 서명 또는 태그 라인을 추가하지 마십시오.] (http://stackoverflow.com/faq#signatures). – meagar

답변

0

그럼 내가 질문 한 후이 몇 주를 해결 결국 않았고, 나는 이미 내 솔루션을 게시 생각,하지만 난하지 추측에 전자 ..

에 따르면 DhruvPathak의 대답이 효과가 있었음에도 불구하고 내가 읽은 모든 문서에 어떤 이유로 든 그것이 작동하지 않았다. 대신 나는 종류의 사기와 이런 짓을 :

$query = "SELECT * FROM location WHERE zip = :zip AND disabled = 0 AND (name LIKE :tag OR tags LIKE :tag2) LIMIT :start, :number"; 

대신 내가 두 변수로를 구분하고 같은 값으로 둘을 결합 두 번 단일 바인드 값을 사용하려고 시도의 :

$statement->bindValue(':tag', '%'.$tag.'%', PDO::PARAM_STR); 
$statement->bindValue(':tag2', '%'.$tag.'%', PDO::PARAM_STR); 

누군가가 실제로이 문제에 부딪혔다면, 나는 이것이 당신을 위해서도 그것을 해결하기를 희망합니다.

1

: 표현 등

$statement->bindValue(':tag', '\'%'.$tag.'%\'', PDO::PARAM_STR); 

:

tags LIKE :tag OR name LIKE :tag 

코드에서

tags LIKE ':tag' OR name LIKE ':tag' 

또는 변경 ~해야한다. 따옴표 .eg 이름 LIKE '% 존 %'

+0

방금 ​​두 솔루션을 모두 시도했지만 지금 행을 반환하지 않는 것 같습니다. mysql 명령 줄에서 다음 명령을 실행할 때 : 'select * from location zip = 92346 및 disabled = 0 그리고 (name '% Am %'또는 '% Am %'와 같은 태그); 두 필드를 모두 반환 할 수 있으므로 바인딩이 해당 명령으로 변환되지 않습니다. – OrangeGrover