sql >> Database >  >> RDS >> Mysql

PDO en MySQL Fulltext-zoekopdrachten

Dit is helaas een rare uitzondering op het gebruik van queryparameters (edit: maar blijkbaar niet in de meest recente punt-release van elke MySQL-tak, zie hieronder).

Het patroon in AGAINST() moet een constante tekenreeks zijn, geen queryparameter. In tegenstelling tot andere constante tekenreeksen in SQL-query's, kunt u hier geen queryparameter gebruiken, simpelweg vanwege een beperking in MySQL.

Om zoekpatronen veilig in zoekopdrachten te interpoleren, gebruikt u de PDO::quote() functie. Merk op dat de functie quote() van PDO al de scheidingstekens voor aanhalingstekens toevoegt (in tegenstelling tot 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");

Re reactie van @YourCommonSense:

Je hebt gelijk, ik heb dit zojuist getest op MySQL 5.5.31, 5.1.68 en 5.0.96 (MySQL Sandbox is een geweldig hulpmiddel), en het lijkt erop dat deze versies wel queryparameters accepteren in de AGAINST()-clausule van een dynamische SQL-query.

Ik herinner me nog een conflict uit het verleden. Misschien is het gecorrigeerd in de meest recente punt-release van elke branch. Ik vind bijvoorbeeld deze gerelateerde bugs:



  1. Wat hebben poker, blackjack, Belot en Préférence met databases te maken?

  2. JSON_VALUE() in MySQL

  3. Hoe geef je positie nul van de spinner een promptwaarde?

  4. Migreren van Oracle naar PostgreSQL - wat u moet weten