Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Pencarian PDO dan MySQL Fulltext

Sayangnya, ini adalah pengecualian aneh untuk penggunaan parameter kueri (edit: tetapi tampaknya tidak dalam rilis poin terbaru dari setiap cabang MySQL, lihat di bawah).

Pola di AGAINST() harus menjadi string konstan, bukan parameter kueri. Tidak seperti string konstan lainnya dalam kueri SQL, Anda tidak dapat menggunakan parameter kueri di sini, hanya karena keterbatasan dalam MySQL.

Untuk menginterpolasi pola penelusuran ke dalam kueri dengan aman, gunakan PDO::quote() fungsi. Perhatikan bahwa fungsi quote() PDO sudah menambahkan pembatas kutipan (tidak seperti 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");

Komentar ulang dari @YourCommonSense:

Anda benar, saya baru saja menguji ini di MySQL 5.5.31, 5.1.68, dan 5.0.96 (MySQL Sandbox adalah alat yang luar biasa), dan tampaknya versi ini menerima parameter kueri dalam klausa AGAINST() dari a kueri SQL dinamis.

Saya masih ingat konflik yang ada di masa lalu. Mungkin sudah diperbaiki di point-release terbaru dari masing-masing cabang. Misalnya, saya menemukan bug terkait ini:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hapus MySQL dengan Grup Oleh

  2. masalah kunci asing di jdbc

  3. kata sandi root mysql lupa

  4. Serialisasi 'Penutupan' tidak diperbolehkan - laravel

  5. Menginisialisasi database MySQL yang diterapkan di AWS EKS