PDO에서 바인딩된 매개변수를 사용하여 퍼지 검색을 어떻게 수행합니까?
문제
이런 짓을 하려고 하는데...
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
기능이 있지만 옵션으로 전달하고 싶었습니다.누군가에게 도움이 되길 바랍니다.
제휴하지 않습니다 StackOverflow