Rất tiếc, đây là một ngoại lệ kỳ lạ đối với việc sử dụng các tham số truy vấn ( chỉnh sửa: nhưng dường như không có trong bản phát hành điểm gần đây nhất của mỗi nhánh MySQL, xem bên dưới).
Mẫu trong AGAINST()
phải là một chuỗi không đổi, không phải là một tham số truy vấn. Không giống như các chuỗi hằng khác trong các truy vấn SQL, bạn không thể sử dụng tham số truy vấn ở đây, đơn giản là do hạn chế trong MySQL.
Để nội suy các mẫu tìm kiếm vào các truy vấn một cách an toàn, hãy sử dụng PDO ::quote () hàm số. Lưu ý rằng hàm quote () của PDO đã thêm các dấu phân tách trích dẫn (không giống như mysql_real_escape_string ()).
$quoted_search_text = $this->db->quote('+word +word');
$sql = $this->db->prepare("SELECT ... FROM search_table
WHERE MATCH(some_field) AGAINST($quoted_search_text IN BOOLEAN MODE");
Nhận xét lại từ @YourCommonSense:
Bạn nói đúng, tôi vừa thử nghiệm điều này trên MySQL 5.5.31, 5.1.68 và 5.0.96 (MySQL Sandbox là một công cụ tuyệt vời) và có vẻ như các phiên bản này chấp nhận các tham số truy vấn trong mệnh đề AGAINST () của truy vấn SQL động.
Tôi vẫn còn nhớ về một cuộc xung đột tồn tại trong quá khứ. Có thể nó đã được sửa chữa trong bản phát hành điểm gần đây nhất của mỗi nhánh. Ví dụ:tôi tìm thấy các lỗi liên quan sau:
- Sử dụng tham số thủ tục được lưu trữ trong mệnh đề AGAINST () luôn trả về cùng một kết quả: http://bugs.mysql.com/bug.php?id=3734
- Lỗi hoặc kết quả lạ với câu lệnh đã chuẩn bị, MATCH và FULLTEXT: http:// bug.mysql.com/bug.php?id=14496