Mysql
 sql >> Database >  >> RDS >> Mysql

Ricerche PDO e MySQL Fulltext

Sfortunatamente questa è una strana eccezione all'uso dei parametri di query (edit: ma a quanto pare non nella versione più recente di ciascun ramo MySQL, vedi sotto).

Il modello in AGAINST() deve essere una stringa costante, non un parametro di query. A differenza di altre stringhe costanti nelle query SQL, qui non è possibile utilizzare un parametro di query, semplicemente a causa di una limitazione in MySQL.

Per interpolare i modelli di ricerca nelle query in modo sicuro, utilizza PDO::quote() funzione. Nota che la funzione quote() di PDO aggiunge già i delimitatori di virgolette (a differenza di 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");

Commento di @YourCommonSense:

Hai ragione, l'ho appena testato su MySQL 5.5.31, 5.1.68 e 5.0.96 (MySQL Sandbox è uno strumento meraviglioso) e sembra che queste versioni accettino parametri di query nella clausola AGAINST() di un interrogazione SQL dinamica.

Ho ancora un ricordo di un conflitto esistente in passato. Forse è stato corretto nella versione più recente di ciascun ramo. Ad esempio, trovo questi bug correlati: