Mysql
 sql >> база данни >  >> RDS >> Mysql

Използване на заместител? в Go mySql заявка за нещо различно от int

Не можете да използвате заместители за идентификатори (като имена на таблици и колони), заместителите са за стойности . Можете да мислите за идентификаторите като подобни на имената на променливи или функции в Go, така че възможността да използвате заместители за идентификатори би било подобно на това да имате eval както в различни скриптови езици.

Това ви свежда до използването на fmt.Sprintf и подобни низови операции за изграждане на SQL, когато не знаете идентификаторите до времето на изпълнение:

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

но това ви отваря за SQL инжекция и проблеми с цитирането, така че бихте искали някакъв бял списък:

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)

Обърнете внимание, че включих цитирането на MySQL backtick в стойностите на картата. В стандартния интерфейс няма нищо за цитиране/изключване на идентификатор, така че трябва да го направите сами. Ако вече пишете картата на белия списък на ръка, тогава можете също да включите цитирането на ръка; в противен случай бихте могли да напишете своя собствена функция за цитиране за идентификатори, като прочетете документацията на MySQL за цитирането и извършите няколко (надявам се) прости операции с низове.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да получите редов ранг?

  2. Как да изтриете колона от таблица в MySQL

  3. Mysql функцията за дата не работи за по-малко от

  4. MySql анализатор на заявки - безплатни решения

  5. MySQL връзката не работи