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

Haruskah Anda menggunakan pernyataan yang disiapkan untuk pelarian mereka saja?

Perbedaannya dianggap dapat diabaikan.

Namun demikian, kita harus membedakan pernyataan asli yang disiapkan dari ide umum pernyataan yang disiapkan.

Yang pertama hanyalah bentuk menjalankan kueri yang didukung oleh sebagian besar DBMS, dijelaskan di sini . Penggunaannya dapat dipertanyakan.
Yang terakhir adalah ide umum untuk mengganti data aktual dengan placeholder, menyiratkan pemrosesan lebih lanjut dari data yang diganti. Ini banyak digunakan dalam pemrograman, printf() . yang terkenal fungsi adalah contohnya. Dan pendekatan terakhir ini harus SELALU digunakan untuk menjalankan kueri terhadap database , tidak peduli apakah itu didukung oleh pernyataan asli yang disiapkan atau tidak. Karena:

  • pernyataan yang disiapkan membuat pemformatan (atau penanganan) yang tepat tidak dapat dihindari .
  • pernyataan yang disiapkan melakukan pemformatan (atau penanganan) yang tepat di satu-satunya tempat yang tepat - tepat sebelum eksekusi kueri, bukan di tempat lain, jadi, keamanan kami tidak akan bergantung pada sumber yang tidak dapat diandalkan seperti
    • beberapa fitur 'ajaib' PHP yang lebih merusak data daripada membuatnya aman.
    • niat baik dari satu (atau beberapa) programmer, yang dapat memutuskan untuk memformat (atau tidak memformat) variabel kita di suatu tempat dalam aliran program. Itulah poin pentingnya.
  • pernyataan yang disiapkan memengaruhi nilai yang masuk ke kueri, tetapi bukan variabel sumber, yang tetap utuh dan dapat digunakan dalam kode lebih lanjut (untuk dikirim melalui email atau ditampilkan di layar).
  • pernyataan yang disiapkan dapat membuat kode aplikasi lebih pendek secara dramatis, melakukan semua pemformatan di belakang layar (*hanya jika pengemudi mengizinkan).

Jadi, bahkan jika Anda mempertimbangkan untuk tidak menggunakan pernyataan asli yang disiapkan (yang cukup oke), Anda harus selalu membuat kueri menggunakan placeholder alih-alih data aktual. Untuk tujuan ini, Anda dapat menggunakan PDO , yang berfungsi persis seperti yang dijelaskan di atas - secara default hanya meniru yang disiapkan , berarti kueri SQL biasa dibuat dari kueri dan data yang disiapkan, lalu dijalankan terhadap database.

Namun, PDO tidak memiliki dukungan untuk banyak tipe data penting, seperti pengenal atau larik - sehingga membuat Anda tidak dapat selalu menggunakan placeholder dan dengan demikian membuat injeksi sangat mungkin dilakukan. Untungnya, safeMysql memiliki placeholder untuk setiap tipe data dan memungkinkan Anda menjalankan kueri dengan aman.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. simpan format input textarea setelah menggunakan mysql_real_escape_string untuk menyimpan

  2. beberapa entitas yang ditambahkan mungkin memiliki kunci utama yang sama pada benih basis data

  3. while($row =mysql_fetch_assoc($result)) - Bagaimana cara melakukan $row?

  4. Mysql menghitung instance substring, lalu pesan berdasarkan

  5. Mengurangi satu baris data dari yang lain di SQL