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

изграждане на динамична заявка в mysql и golang

За да отговорите на въпроса си как да форматирате низа, простият отговор е да използвате fmt.Sprintf за да структурирате низа си. Въпреки това вижте по-долу за бърза бележка относно използването на fmt.Sprintf за db заявки:

Пример:

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)

Използвайки това за заявки, вие сте в безопасност от инжекции. Като се има предвид това, може да се изкушите да промените това и да използвате db.Exec и за създаване/актуализации/изтриване. Като общо правило, ако използвате db.Exec с fmt.Sprintf и не дезинфекцирате своите входове първо, вие се отваряте за sql инжекции .

GoPlay с прост пример защо fmt.Sprintf с db.Exec е лош:
https://play.golang.org/p/-IWyymAg_Q

Трябва да използвате db.Query или db.Prepare по подходящ начин за избягване на тези видове вектори на атака. Може да се наложи да модифицирате примерния код по-горе, за да излезете с безопасен за инжектиране фрагмент, но се надявам, че ви дадох достатъчно, за да започнете.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. как да коригирате недефинирана променлива:сътрудници в domPDF в Laravel

  2. как да използвате канонични функции в Entity Framework и Mysql

  3. Изпълнете php код условно

  4. ПРОМЕНЯНЕ НА ТАБЛИЦАТА

  5. неподдържано сканиране, съхраняване на driver.Value тип []uint8 в тип *time.Time