Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wyszukiwanie pełnotekstowe PDO i MySQL

Jest to niestety dziwny wyjątek od używania parametrów zapytania (edycja: ale najwyraźniej nie w najnowszym wydaniu punktowym każdej gałęzi MySQL, patrz poniżej).

Wzorzec w AGAINST() musi być stałym ciągiem, a nie parametrem zapytania. W przeciwieństwie do innych stałych łańcuchów w zapytaniach SQL, nie możesz tutaj użyć parametru zapytania, po prostu z powodu ograniczeń w MySQL.

Aby bezpiecznie interpolować wzorce wyszukiwania do zapytań, użyj PDO::quote() funkcjonować. Zauważ, że funkcja quote() w PDO już dodaje ograniczniki cytatów (w przeciwieństwie do 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");

Ponownie komentarz od @YourCommonSense:

Masz rację, właśnie przetestowałem to na MySQL 5.5.31, 5.1.68 i 5.0.96 (MySQL Sandbox to wspaniałe narzędzie) i wygląda na to, że te wersje akceptują parametry zapytania w klauzuli AGAINST() dynamiczne zapytanie SQL.

Wciąż mam w pamięci konflikt z przeszłości. Być może zostało to poprawione w najnowszym wydaniu punktowym każdej gałęzi. Na przykład znajduję te powiązane błędy:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wstaw MYSQL tam, gdzie nie istnieje z PDO

  2. 10 powodów, aby trzymać się MySQL

  3. Konwersja typu danych MySQL z varchar na float

  4. Jak mogę przyspieszyć zapytanie MySQL z dużym przesunięciem w klauzuli LIMIT?

  5. node.js + łączenie połączeń mysql