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

PDO og MySQL fuldtekstsøgninger

Dette er desværre en mærkelig undtagelse fra brugen af ​​forespørgselsparametre (rediger: men tilsyneladende ikke i den seneste punktudgivelse af hver MySQL-gren, se nedenfor).

Mønsteret i AGAINST() skal være en konstant streng, ikke en forespørgselsparameter. I modsætning til andre konstante strenge i SQL-forespørgsler kan du ikke bruge en forespørgselsparameter her, simpelthen på grund af en begrænsning i MySQL.

For at interpolere søgemønstre i forespørgsler sikkert, brug PDO::quote() fungere. Bemærk, at PDO's quote()-funktion allerede tilføjer citatafgrænsningerne (i modsætning til 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");

Rekommentar fra @YourCommonSense:

Du har ret, jeg har lige testet dette på MySQL 5.5.31, 5.1.68 og 5.0.96 (MySQL Sandbox er et vidunderligt værktøj), og det ser ud til, at disse versioner accepterer forespørgselsparametre i AGAINST()-sætningen i en dynamisk SQL-forespørgsel.

Jeg har stadig en erindring om en konflikt, der eksisterede i fortiden. Måske er det blevet rettet i den seneste punktudgivelse af hver gren. For eksempel finder jeg disse relaterede fejl:



  1. PostgreSQL - Tilføj nøgle til hvert objekt i et JSONB-array

  2. '<'-operatøren er reserveret PowerShell-fejl

  3. Hvordan opretter man et bord med to eller flere fremmednøgler ved hjælp af Android Room?

  4. MySQL – Fix – Fejl – Dit kodeord opfylder ikke de nuværende politikkrav