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

Apa perbedaan antara addlash PHP dan mysql(i)_escape_string?

Pertama-tama:jangan gunakan mysql_escape_string , itu tidak digunakan lagi (karena suatu alasan)!

Jika Anda harus mendukung aplikasi lama yang terhubung ke database melalui mysql ekstensi (yang tidak digunakan lagi ), gunakan mysql_real_escape_string sebagai gantinya. Jika tidak, segera beralih ke mysqli , di mana pernyataan yang disiapkan dan parameter terikat menyediakan mekanisme yang lebih kuat untuk menghindari input pengguna.

Yang mengatakan, jawabannya dapat ditemukan dengan membaca deskripsi mysql_real_escape_string dan addslashes :

Perbedaan #1

addslashes tidak tahu apa-apa tentang penyandian koneksi MySql. Jika Anda meneruskan string berisi byte yang mewakili pengkodean selain pengkodean yang digunakan oleh koneksi MySql, itu akan dengan senang hati keluar dari semua byte yang memiliki nilai karakter ' , " , \ dan \x00 . Ini mungkin tidak sama dengan semua karakter ' , " , \ dan \x00 jika Anda menggunakan penyandian selain penyandian 8-bit dan UTF-8. Hasilnya adalah string yang diterima oleh MySql akan rusak.

Untuk memicu bug ini, coba gunakan iconv untuk mengonversi variabel Anda ke UTF-16 dan kemudian menghindarinya dengan addslashes . Lihat apa yang diterima database Anda.

Ini adalah salah satu alasan mengapa addslashes tidak boleh digunakan untuk melarikan diri.

Perbedaan #2

Berbeda dengan addslashes , mysql_real_escape_string juga lolos dari karakter \r , \n , dan \x1a . Tampaknya karakter-karakter ini juga harus diloloskan saat berbicara dengan MySql, jika tidak, kueri yang salah format akan menjadi hasilnya

Ini adalah alasan lain mengapa addslashes tidak boleh digunakan untuk melarikan diri.



  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:ERROR 1227 (42000):Akses ditolak - Tidak dapat MENCIPTAKAN PENGGUNA

  2. Tidak ada pemetaan Dialek untuk tipe JDBC:1111

  3. Klausa IN tidak menggunakan indeks

  4. Masukkan data dari satu tabel ke tabel lain di MySQL

  5. Cara membuat indeks pada banyak kolom