Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tìm kiếm PDO và MySQL Fulltext

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:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TẢI THÔNG TIN DỮ LIỆU:Chuỗi ký tự ut8mb4 không hợp lệ

  2. Tạo Trình kích hoạt để xóa các hàng cũ hơn 90 ngày

  3. PHP Kiểm tra NULL

  4. JSON_TYPE () - Nhận loại Giá trị JSON trong MySQL

  5. Chèn MySQL ở nơi không tồn tại / nếu không tồn tại