PDO에서 바인딩된 매개변수를 사용하여 퍼지 검색을 어떻게 수행합니까?

StackOverflow https://stackoverflow.com/questions/60779

  •  09-06-2019
  •  | 
  •  

문제

이런 짓을 하려고 하는데...

WHERE username LIKE '%$str%'

...그러나 PDO의 준비된 명령문에 바인딩된 매개변수를 사용합니다.예:

$query = $db->prepare("select * from comments where comment like :search");
$query->bindParam(':search', $str);
$query->execute();

나는 작은 따옴표와 % 기호의 수많은 순열을 시도했지만 그것은 나에게 맞지 않습니다.

예전에 이 문제로 씨름했던 기억이 나는데 참고 자료를 찾을 수 없습니다.명명된 매개변수를 사용하여 PDO에서 이 작업을 어떻게 훌륭하게 수행할 수 있는지 아는 사람이 있습니까?

도움이 되었습니까?

해결책

아.php.net에서 답변을 생각나게 하는 댓글을 찾았습니다.BindParam이 평가되기 전에 값을 와일드카드로 입력해야 하며 인용에 대해 걱정할 필요가 없습니다.예를 들어 이것은 잘 작동합니다.

$str = "%$str%";
$query = $db->prepare("select * from comments where comment like :search");
$query->bindParam(':search', $str);
$query->execute();

다른 팁

5년 후, 다른 사람이 이 문제를 우연히 발견할 경우를 대비해 제가 발견한 대체 방법이 있습니다.수용된 솔루션은 제 상황에서는 실제로 실현 가능하지 않았지만 이 방법도 작업을 완료하는 것 같습니다.

$query = $db->prepare("select * FROM table WHERE field LIKE CONCAT('%',:search,'%')");
$query->bindParam(':search', $str);
$query->execute();

호출 오버헤드로 인해 성능 저하가 발생할지 확실하지 않습니다. CONCAT 기능이 있지만 옵션으로 전달하고 싶었습니다.누군가에게 도움이 되길 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top