2008-09-13 13 views
11

Đang cố gắng để làm việc này ...Làm thế nào để bạn thực hiện tìm kiếm mờ bằng cách sử dụng các tham số ràng buộc trong PDO?

WHERE username LIKE '%$str%' 

... nhưng sử dụng các tham số ràng buộc để chuẩn bị phát biểu trong PDO. ví dụ:

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

Tôi đã thử nhiều hoán vị đơn giá và dấu% và chỉ mới bắt chéo với tôi.

Tôi dường như nhớ đấu vật với điều này tại một số điểm trước đây nhưng tôi không thể tìm thấy bất kỳ tài liệu tham khảo nào. Có ai biết làm thế nào (nếu?), Bạn có thể làm điều này độc đáo trong PDO với các thông số được đặt tên?

Trả lời

15

Ah. Tìm thấy một bình luận trên php.net nhắc tôi về câu trả lời; bạn cần phải ký tự đại diện giá trị của bạn trước khi bindParam được đánh giá và không lo lắng về việc trích dẫn nó. Vì vậy, ví dụ: công cụ này hoạt động tốt:

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

Rất vui khi bạn tìm thấy nó. Tôi chỉ tìm thấy nó ngày hôm kia, quá, tìm kiếm cùng một điều. Quá xấu bạn không thể chấp nhận câu trả lời của riêng bạn! –

+1

Aha - họ đã sửa nó - bây giờ bạn có thể chấp nhận câu trả lời của riêng bạn. Tốt cho việc sử dụng StackOverflow như một thư viện – Polsonby

4

5 năm sau, trong trường hợp bất kỳ ai khác gặp phải điều này, có một phương pháp thay thế mà tôi đã phát hiện. Các giải pháp được chấp nhận là không thực sự khả thi đối với hoàn cảnh của tôi, nhưng phương pháp này dường như để có được công việc làm cũng như:

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

Tôi không chắc chắn nếu có sẽ là một buổi biểu diễn hit do sự cần thiết của việc gọi CONCAT chức năng, nhưng tôi muốn vượt qua điều này cùng với một tùy chọn. Hy vọng rằng nó sẽ giúp một ai đó.

+0

'$ query-> bindParam (': search',"% $ str% ");' không khả thi? Bạn đùa? –

+1

Haha, vâng, mã nằm trong hàm trừu tượng cơ sở dữ liệu tạo ra mệnh đề WHERE từ đầu vào. Hàm đó không có quyền truy cập vào các giá trị tham số, chỉ là các khóa. Có lẽ một cách tốt hơn để làm điều đó, nhưng nó đang làm việc cho bây giờ, vì vậy tôi sẽ sống với nó. –

+2

Bỏ phiếu xuống dường như hơi khắc nghiệt. Đó là một giải pháp hợp lệ cho vấn đề phải không? –