Mysql
 sql >> база данни >  >> RDS >> Mysql

Търсене в пълен текст на PDO и MySQL

Това за съжаление е странно изключение от използването на параметри на заявката (редактиране: но очевидно не в най-новата версия на точка на всеки клон на MySQL, вижте по-долу).

Моделът в AGAINST() трябва бъде постоянен низ, а не параметър на заявката. За разлика от други константни низове в SQL заявки, тук не можете да използвате параметър на заявка, просто поради ограничение в MySQL.

За безопасно интерполиране на модели за търсене в заявки, използвайте PDO::quote() функция. Имайте предвид, че функцията quote() на PDO вече добавя разделителите на кавички (за разлика от 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");

Повторен коментар от @YourCommonSense:

Прав си, току-що тествах това на MySQL 5.5.31, 5.1.68 и 5.0.96 (MySQL Sandbox е прекрасен инструмент) и изглежда, че тези версии приемат параметри на заявката в клаузата AGAINST() на динамична SQL заявка.

Все още си спомням за конфликт, съществуващ в миналото. Може би е коригиран в най-новата точка-релиз на всеки клон. Например намирам следните свързани грешки:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вземете данни от mysql база данни с помощта на php и jquery ajax

  2. Многостепенно меню с PHP/MySQL

  3. MySQL:Как да нулирам или променям паролата за root на MySQL?

  4. TIME() Примери – MySQL

  5. MySQL автоматично съхранява дата и час за всеки ред