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

membangun kueri dinamis di mysql dan golang

Untuk menjawab pertanyaan Anda tentang cara memformat string, jawaban sederhananya adalah menggunakan fmt.Sprintf untuk menyusun string Anda. Namun lihat lebih jauh ke bawah untuk catatan singkat tentang penggunaan fmt.Sprintf untuk kueri db:

Contoh:

query := fmt.Sprintf("SELECT id FROM users WHERE login='%s'", login)
err = db.Query(query)

// Equivalent to:
rows, err := db.Query("SELECT id FROM users WHERE login=?", login)

Menggunakan ini untuk kueri, Anda aman dari suntikan. Meskipun demikian, Anda mungkin tergoda untuk memodifikasi ini dan menggunakan db.Exec untuk pembuatan/pembaruan/penghapusan juga. Sebagai aturan umum, jika Anda menggunakan db.Exec dengan fmt.Sprintf dan tidak membersihkan input Anda terlebih dahulu, Anda membuka diri untuk injeksi sql .

GoPlay dengan contoh sederhana mengapa fmt.Sprintf dengan db.Exec buruk:
https://play.golang.org/p/-IWyymAg_Q

Anda harus menggunakan db.Query atau db.Prepare dengan cara yang tepat untuk menghindari vektor serangan semacam ini. Anda mungkin harus mengubah contoh kode di atas untuk menghasilkan cuplikan yang aman untuk injeksi, tetapi semoga saya memberi Anda cukup untuk memulai.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara saya bermigrasi dengan mudah dari MySQL ke PostgreSQL?

  2. bagaimana cara memeriksa nol atau tidak jika tipe data mysql adalah stempel waktu dengan nilai default 0000-00-00 00:00?

  3. Adakah saran untuk skema db untuk menyimpan kata kunci terkait?

  4. Sisipkan, Perbarui, Hapus baris jtable yang memiliki data mysql

  5. Tidak dapat mengakses MySQL setelah secara otomatis membuat kata sandi sementara