PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Cara keluar dari string saat mencocokkan pola di PostgreSQL

Karakter _ dan % harus dikutip untuk dicocokkan secara harfiah dalam pernyataan LIKE, tidak ada jalan lain. Pilihannya adalah tentang melakukannya di sisi klien, atau sisi server (biasanya dengan menggunakan SQL replace(), lihat di bawah). Juga untuk membuatnya 100% benar dalam kasus umum, ada beberapa hal yang perlu dipertimbangkan.

Secara default, karakter kutipan yang digunakan sebelum _ atau % adalah garis miring terbalik (\), tetapi dapat diubah dengan klausa ESCAPE segera setelah klausa LIKE. Bagaimanapun, karakter kutipan harus diulang dua kali dalam pola untuk dicocokkan secara harfiah sebagai satu karakter.

Contoh:... WHERE field like 'john^%node1^^[email protected]%' ESCAPE '^' akan cocok dengan john%node1^[email protected] diikuti oleh apa saja.

Ada masalah dengan pilihan default backslash:itu sudah digunakan untuk tujuan lain ketika standard_conforming_strings OFF (PG 9.1 telah AKTIF secara default, tetapi versi sebelumnya masih digunakan secara luas, ini adalah hal yang perlu dipertimbangkan).

Juga jika kutipan untuk wildcard LIKE dilakukan di sisi klien dalam skenario injeksi input pengguna, itu akan menjadi selain ke kutipan string normal yang sudah diperlukan pada input pengguna.

Sekilas contoh go-pgsql mengatakan bahwa ia menggunakan placeholder gaya $N untuk variabel... Jadi, inilah upaya untuk menulisnya dengan cara yang umum:ia bekerja dengan standard_conforming_strings baik ON atau OFF, menggunakan penggantian sisi server dari [%_], karakter kutipan alternatif, kutipan karakter kutipan, dan menghindari injeksi sql:

   db.Query("SELECT * from USERS where name like replace(replace(replace($1,'^','^^'),'%','^%'),'_','^_') ||'%' ESCAPE '^'",
     variable_user_input);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Peran tidak ada dan tidak dapat membuat database saat menggunakan PostgreSQL

  2. Instalasi Postgis:tipe geometri tidak ada

  3. Buat pengguna:tidak dapat terhubung ke database postgres:FATAL:peran tom tidak ada

  4. Postgres tidak menggunakan indeks ketika pemindaian indeks adalah opsi yang jauh lebih baik

  5. Bagaimana cara mengabaikan kesalahan dengan psql \copy meta-command