Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

xây dựng một truy vấn động trong mysql và golang

Để trả lời câu hỏi của bạn về cách định dạng chuỗi, câu trả lời đơn giản là sử dụng fmt.Sprintf để cấu trúc chuỗi của bạn. Tuy nhiên xem thêm để biết ghi chú nhanh về cách sử dụng fmt.Sprintf cho các truy vấn db:

Ví dụ:

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)

Sử dụng cái này cho các câu hỏi, bạn sẽ an toàn khi tiêm. Điều đó đang được nói, bạn có thể bị cám dỗ để sửa đổi điều này và sử dụng db.Exec cho các sáng tạo / cập nhật / xóa. Theo nguyên tắc chung, nếu bạn sử dụng db.Exec với fmt.Sprintf và không khử trùng đầu vào của bạn trước, bạn sẽ tự mở để tiêm sql .

GoPlay với ví dụ đơn giản về lý do tại sao fmt.Sprintf với db.Exec kém:
https://play.golang.org/p/-IWyymAg_Q

Bạn nên sử dụng db.Query hoặc db.Prepare theo cách thích hợp để tránh các loại vectơ tấn công này. Bạn có thể phải sửa đổi mẫu mã ở trên để tạo ra đoạn mã tiêm an toàn, nhưng hy vọng tôi đã cung cấp đủ cho bạn để bắt đầu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. doct2 và group_concat

  2. MySql tự động tăng dần khóa chính chữ-số?

  3. MySQL và JSON - chuyển mảng thành hàng

  4. MySQL trích xuất bản rõ từ dữ liệu html hay PHP?

  5. Bảng Hibernate_sequence được tạo