Pemadanan Corak Literal dalam Pertanyaan PostgreSQL
Dalam PostgreSQL, melakukan padanan corak LIKE pada lajur rentetan memerlukan perhatian khusus apabila berurusan dengan input yang disediakan pengguna . Input tidak sah yang mengandungi aksara khas (cth., '_' atau '%') boleh meluaskan hasil carian secara tidak sengaja. Untuk menangani isu ini, adalah perlu untuk memastikan bahawa aksara ini ditafsir secara literal.
Penyingkiran Sisi Pelanggan atau Pelayan
Keputusan sama ada untuk mengendalikan melarikan diri pada bahagian klien atau bahagian pelayan bergantung pada keperluan khusus. Melarikan diri dari pihak pelanggan melibatkan pra-pemprosesan input pengguna dalam kod aplikasi sebelum menghantarnya ke pangkalan data. Pendekatan ini menyediakan lebih banyak kawalan tetapi memerlukan logik pengendalian tambahan.
Meloloskan Sisi Pelayan
PostgreSQL menawarkan penyelesaian yang lebih elegan untuk melarikan diri dari sisi pelayan. Dengan menggunakan klausa ESCAPE dalam pernyataan LIKE, anda boleh menentukan aksara khas untuk digunakan untuk memetik aksara kad bebas. Ini menghalang mereka daripada ditafsirkan sebagai metakarakter regex.
Sebagai contoh, pertanyaan berikut akan sepadan dengan rentetan tepat "rompak":
SELECT * FROM users WHERE name LIKE 'rob%' ESCAPE '^'
Melepaskan Pertimbangan
Apabila menggunakan pelarian sebelah pelayan, adalah penting untuk mempertimbangkan berikut:
Go-PGSQL Contoh
Untuk Go-PGSQL, anda boleh menggunakan pertanyaan berikut untuk melaksanakan padanan corak literal:
db.Query("SELECT * from USERS where name like replace(replace(replace(,'^','^^'),'%','^%'),'_','^_') ||'%' ESCAPE '^'", variable_user_input);
Pertanyaan ini menggunakan penggantian sisi pelayan untuk melarikan aksara kad bebas, alternatif watak melarikan diri dan melarikan diri berganda untuk memastikan padanan literal sambil melindungi daripada suntikan SQL.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melakukan Padanan Corak Literal dalam Pertanyaan PostgreSQL untuk Mengelakkan Peluasan Hasil Carian Secara Tidak Sengaja?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!