2008-09-13 4 views
11
이런 종류의 일을하려고

...PDO에서 바운드 매개 변수를 사용하여 퍼지 검색을 수행하는 방법은 무엇입니까?

WHERE username LIKE '%$str%' 

...하지만 PDO 준비된 문에 바인딩 된 매개 변수를 사용하여. 예컨대 : 나는 작은 따옴표와 % 표지판의 많은 순열을 시도하고 그냥 나와 함께 십자가를지고있어

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

.

나는 어떤 점에서 전에 이것과 씨름하고 있었지만 나는 어떤 참고 문헌도 찾을 수 없다. 누구든지 명명 된 매개 변수를 사용하여 PDO에서이 작업을 멋지게 수행 할 수있는 방법을 알고 있습니까?

답변

15

아. 대답을 생각 나게하는 php.net에 대한 의견을 찾았습니다. bindParam이 평가되기 전에 값을 와일드 카드로 묶어야하며 따옴표를 사용하는 것에 대해 걱정할 필요가 없습니다. 예를 들어 잘 작동하는 경우 :

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

당신을 발견했기 때문에 기쁘게 생각합니다. 나는 다른 날에도 똑같은 것을 찾았습니다. 너무 나빠서 자신의 대답을 받아 들일 수 없습니다! –

+1

아하 - 그들은 그것을 고쳤습니다 - 당신은 지금 당신 자신의 대답을 받아 들일 수 있습니다. StackOverflow를 라이브러리로 사용하는 것이 좋습니다 – Polsonby

4

5 년 후, 다른 누군가가이 문제에 걸리면, 내가 찾은 다른 방법이 있습니다. 허용되는 솔루션은 내 상황에 정말 가능하지,하지만이 방법은 작업뿐만 아니라 끝낼 것 :

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

잘 모르겠어요 성능 저하가있을 것입니다 경우 인해 호출의 오버 헤드 CONCAT 기능이지만이 옵션을 옵션으로 전달하려고했습니다. 희망적으로 그것은 누군가를 도울 것입니다.

+0

'$ query-> bindParam (': search', "% $ str %");는 실현 가능하지 않습니까? 장난 해? –

+1

하하, 코드는 입력에서 WHERE 절을 생성하는 데이터베이스 추상화 함수에 있습니다. 이 함수는 매개 변수 값에 액세스 할 수 없으며 키만 액세스 할 수 있습니다. 아마도 더 좋은 방법 일 것입니다.하지만 지금은 효과가 있습니다. 따라서 함께 살 것입니다. –

+2

다운 투표는 약간 가혹한 것 같습니다. 그것은 문제의 유효한 해결책이 아닙니까? 아닙니다. –

관련 문제