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

Sử dụng trình giữ chỗ? trong Truy vấn mySql của Go cho bất kỳ thứ gì khác ngoài int

Bạn không thể sử dụng trình giữ chỗ cho số nhận dạng (chẳng hạn như tên bảng và cột), trình giữ chỗ dành cho giá trị . Bạn có thể coi số nhận dạng tương tự như tên biến hoặc tên hàm trong Go, vì vậy việc có thể sử dụng trình giữ chỗ cho số nhận dạng sẽ giống như việc có eval như trong các ngôn ngữ kịch bản khác nhau.

Điều này giúp bạn giảm bớt việc sử dụng fmt.Sprintf và các hoạt động chuỗi tương tự để xây dựng SQL khi bạn không biết số nhận dạng cho đến thời gian chạy:

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

nhưng điều này mở ra cho bạn các vấn đề về chèn và trích dẫn SQL, vì vậy bạn muốn có một số loại danh sách trắng:

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)

Lưu ý rằng tôi đã bao gồm trích dẫn backtick của MySQL trong các giá trị của bản đồ. Không có gì trong giao diện chuẩn để trích dẫn / thoát mã định danh nên bạn phải tự làm. Nếu bạn đã viết bản đồ danh sách trắng bằng tay thì bạn cũng có thể đưa vào phần trích dẫn bằng tay; nếu không, bạn có thể viết hàm trích dẫn của riêng mình cho các số nhận dạng bằng cách đọc tài liệu MySQL về trích dẫn và thực hiện một vài thao tác chuỗi đơn giản (hy vọng).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mẹo nâng cấp Percona XtraDB Cluster lên 8.0

  2. Không thể kết nối với AWS RDS thông qua PDO

  3. Lỗi MySQL:Sử dụng không chính xác UPDATE và LIMIT

  4. Kích thước của cột int (11) trong mysql tính bằng byte là bao nhiêu?

  5. MySQL so khớp () với () - thứ tự theo mức độ liên quan và cột?