sql >> Databáze >  >> RDS >> Mysql

PDO a MySQL Fulltextové vyhledávání

Toto je bohužel zvláštní výjimka z použití parametrů dotazu (edit: ale zjevně ne v nejnovějším vydání každé větve MySQL, viz níže).

Vzor v AGAINST() musí být konstantní řetězec, nikoli parametr dotazu. Na rozdíl od jiných konstantních řetězců v dotazech SQL zde nemůžete použít parametr dotazu, jednoduše kvůli omezení v MySQL.

Chcete-li bezpečně interpolovat vyhledávací vzory do dotazů, použijte PDO::quote() funkce. Všimněte si, že funkce quote() PDO již přidává oddělovače citací (na rozdíl od 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");

Znovu komentář od @YourCommonSense:

Máte pravdu, právě jsem to testoval na MySQL 5.5.31, 5.1.68 a 5.0.96 (MySQL Sandbox je skvělý nástroj) a zdá se, že tyto verze přijímají parametry dotazu v klauzuli AGAINST() dynamický SQL dotaz.

Stále si vzpomínám na konflikt existující v minulosti. Možná to bylo opraveno v nejnovějším vydání každé větve. Například jsem našel tyto související chyby:



  1. Jak získat rozsah náhodného celého čísla mysql?

  2. Alternativy PGTune - Konfigurace ClusterControl PostgreSQL

  3. zobrazení dat z SQL po kliknutí na mapu svg

  4. existuje způsob, jak vypsat všechna vyhrazená slova v mysql pomocí nástroje příkazového řádku mysql