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

Menggunakan tempat penampung? dalam kueri Go mySql untuk apa pun selain int

Anda tidak dapat menggunakan placeholder untuk pengidentifikasi (seperti nama tabel dan kolom), placeholder adalah untuk nilai . Anda dapat menganggap pengidentifikasi mirip dengan nama variabel atau fungsi di Go sehingga dapat menggunakan placeholder untuk pengidentifikasi akan sama dengan memiliki eval seperti dalam berbagai bahasa skrip.

Ini mengurangi Anda untuk menggunakan fmt.Sprintf dan operasi string serupa untuk membangun SQL saat Anda tidak mengetahui pengenal hingga waktu proses:

col := "firstName"
sql := fmt.Sprintf("select %s from persons", col)

tapi ini membuka Anda untuk injeksi SQL dan mengutip masalah sehingga Anda ingin semacam daftar putih:

quotedColumns := map[string]string{
    "firstName": "`firstName`",
    "lastName": "`lastName`",
    ...
}

quoted, ok := quotedColumns[columnName]
if !ok {
    // Do something with the error here and run away...
}
sql := fmt.Sprintf("select %s from persons", quoted)

Perhatikan bahwa saya telah menyertakan kutipan backtick MySQL dalam nilai peta. Tidak ada apa pun di antarmuka standar untuk mengutip/melarikan diri dari pengenal sehingga Anda harus melakukannya sendiri. Jika Anda sudah menulis peta daftar putih dengan tangan, Anda juga dapat menyertakan kutipan dengan tangan; jika tidak, Anda dapat menulis fungsi kutipan Anda sendiri untuk pengidentifikasi dengan membaca dokumentasi MySQL tentang mengutip dan melakukan beberapa (semoga) operasi string sederhana.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Perbandingan mesin pencari teks lengkap - Lucene, Sphinx, Postgresql, MySQL?

  2. Bagaimana cara memperbaiki kesalahan 'Nilai di luar rentang yang disesuaikan untuk kolom'?

  3. Cara Mendapatkan Data Minggu Ini di MySQL

  4. Peningkatan Nilai PDO PHP, Mysql

  5. Sumber Data MySQL tidak muncul di Visual Studio