1. package main
  2.  
  3. import (
  4. "database/sql"
  5. "fmt"
  6.  
  7. _ "github.com/go-sql-driver/mysql"
  8. )
  9.  
  10. var DB *sql.DB
  11.  
  12. func initDb() error {
  13. var err error
  14. dsn := "root:root@tcp(localhost:3306)/golang_db"
  15. DB, err = sql.Open("mysql", dsn)
  16. if err != nil {
  17. return err
  18. }
  19.  
  20. DB.SetMaxOpenConns()
  21. DB.SetMaxIdleConns()
  22. return nil
  23. }
  24.  
  25. type User struct {
  26. Id int64 `db:"id"`
  27. Name sql.NullString `db:"string"`
  28. Age int `db:"age"`
  29. }
  30.  
  31. func testQueryMultilRow() {
  32. sqlstr := "select id, name, age from user where id > ?"
  33. rows, err := DB.Query(sqlstr, )
  34. //重点关注, rows对象一定要close掉
  35. defer func() {
  36. if rows != nil {
  37. rows.Close()
  38. }
  39. }()
  40.  
  41. if err != nil {
  42. fmt.Printf("query failed, err:%v\n", err)
  43. return
  44. }
  45.  
  46. for rows.Next() {
  47. var user User
  48. err := rows.Scan(&user.Id, &user.Name, &user.Age)
  49. if err != nil {
  50. fmt.Printf("scan failed, err:%v\n", err)
  51. return
  52. }
  53. fmt.Printf("user:%#v\n", user)
  54. }
  55.  
  56. }
  57.  
  58. func testQueryData() {
  59. for i := ; i < ; i++ {
  60. fmt.Printf("query %d times\n", i)
  61. sqlstr := "select id, name, age from user where id=?"
  62. row := DB.QueryRow(sqlstr, )
  63. /*if row != nil {
  64. continue
  65. }*/
  66. var user User
  67. err := row.Scan(&user.Id, &user.Name, &user.Age)
  68. if err != nil {
  69. fmt.Printf("scan failed, err:%v\n", err)
  70. return
  71. }
  72.  
  73. fmt.Printf("id:%d name:%v age:%d\n", user.Id, user.Name, user.Age)
  74. }
  75.  
  76. }
  77.  
  78. func testInsertData() {
  79. sqlstr := "insert into user(name, age) values(?, ?)"
  80. result, err := DB.Exec(sqlstr, "tom", )
  81. if err != nil {
  82. fmt.Printf("insert failed, err:%v\n", err)
  83. return
  84. }
  85.  
  86. id, err := result.LastInsertId()
  87. if err != nil {
  88. fmt.Printf("get last insert id failed, err:%v\n", err)
  89. return
  90. }
  91. fmt.Printf("id is %d\n", id)
  92. }
  93.  
  94. func testUpdateData() {
  95. sqlstr := "update user set name=? where id=?"
  96. result, err := DB.Exec(sqlstr, "jim", )
  97. if err != nil {
  98. fmt.Printf("insert failed, err:%v\n", err)
  99. return
  100. }
  101.  
  102. affected, err := result.RowsAffected()
  103. if err != nil {
  104. fmt.Printf("get affected rows failed, err:%v\n", err)
  105. }
  106. fmt.Printf("update db succ, affected rows:%d\n", affected)
  107. }
  108.  
  109. func testDeleteData() {
  110. sqlstr := "delete from user where id=?"
  111. result, err := DB.Exec(sqlstr, )
  112. if err != nil {
  113. fmt.Printf("insert failed, err:%v\n", err)
  114. return
  115. }
  116.  
  117. affected, err := result.RowsAffected()
  118. if err != nil {
  119. fmt.Printf("get affected rows failed, err:%v\n", err)
  120. }
  121. fmt.Printf("delete db succ, affected rows:%d\n", affected)
  122. }
  123.  
  124. func testPrepareData() {
  125. sqlstr := "select id, name, age from user where id > ?"
  126. stmt, err := DB.Prepare(sqlstr)
  127. if err != nil {
  128. fmt.Printf("prepare failed, err:%v\n", err)
  129. return
  130. }
  131.  
  132. defer func() {
  133. if stmt != nil {
  134. stmt.Close()
  135. }
  136. }()
  137.  
  138. rows, err := stmt.Query()
  139. //重点关注, rows对象一定要close掉
  140. defer func() {
  141. if rows != nil {
  142. rows.Close()
  143. }
  144. }()
  145.  
  146. if err != nil {
  147. fmt.Printf("query failed, err:%v\n", err)
  148. return
  149. }
  150.  
  151. for rows.Next() {
  152. var user User
  153. err := rows.Scan(&user.Id, &user.Name, &user.Age)
  154. if err != nil {
  155. fmt.Printf("scan failed, err:%v\n", err)
  156. return
  157. }
  158. fmt.Printf("user:%#v\n", user)
  159. }
  160. }
  161.  
  162. func testPrepareInsertData() {
  163. sqlstr := "insert into user(name, age) values(?, ?)"
  164. stmt, err := DB.Prepare(sqlstr)
  165. if err != nil {
  166. fmt.Printf("insert failed, err:%v\n", err)
  167. return
  168. }
  169.  
  170. defer func() {
  171. if stmt != nil {
  172. stmt.Close()
  173. }
  174. }()
  175. result, err := stmt.Exec("jim", )
  176. id, err := result.LastInsertId()
  177. if err != nil {
  178. fmt.Printf("get last insert id failed, err:%v\n", err)
  179. return
  180. }
  181. fmt.Printf("id is %d\n", id)
  182. }
  183.  
  184. func testTrans() {
  185.  
  186. conn, err := DB.Begin()
  187. if err != nil {
  188. if conn != nil {
  189. conn.Rollback()
  190. }
  191. fmt.Printf("begin failed, err:%v\n", err)
  192. return
  193. }
  194.  
  195. sqlstr := "update user set age = 1 where id = ?"
  196. _, err = conn.Exec(sqlstr, )
  197. if err != nil {
  198. conn.Rollback()
  199. fmt.Printf("exec sql:%s failed, err:%v\n", sqlstr, err)
  200. return
  201. }
  202.  
  203. sqlstr = "update user set age = 2 where id = ?"
  204. _, err = conn.Exec(sqlstr, )
  205. if err != nil {
  206. conn.Rollback()
  207. fmt.Printf("exec second sql:%s failed, err:%v\n", sqlstr, err)
  208. return
  209. }
  210. err = conn.Commit()
  211. if err != nil {
  212. fmt.Printf("commit failed, err:%v\n", err)
  213. conn.Rollback()
  214. return
  215. }
  216. }
  217.  
  218. func main() {
  219. err := initDb()
  220. if err != nil {
  221. fmt.Printf("init db failed, err:%v\n", err)
  222. return
  223. }
  224.  
  225. //testQueryData()
  226. //testQueryMultilRow()
  227. //testInsertData()
  228. //testUpdateData()
  229. //testDeleteData()
  230. //testPrepareData()
  231. //testPrepareInsertData()
  232. testTrans()
  233. }
  1. package main
  2.  
  3. import (
  4. "database/sql"
  5. "fmt"
  6.  
  7. _ "github.com/go-sql-driver/mysql"
  8. "github.com/jmoiron/sqlx"
  9. )
  10.  
  11. var DB *sqlx.DB
  12.  
  13. func initDb() error {
  14. var err error
  15. dsn := "root:root@tcp(localhost:3306)/golang_db"
  16. DB, err = sqlx.Open("mysql", dsn)
  17. if err != nil {
  18. return err
  19. }
  20.  
  21. DB.SetMaxOpenConns()
  22. DB.SetMaxIdleConns()
  23. return nil
  24. }
  25.  
  26. type User struct {
  27. Id int64 `db:"id"`
  28. Name sql.NullString `db:"name"`
  29. Age int `db:"age"`
  30. }
  31.  
  32. func testQuery() {
  33. sqlstr := "select id, name, age from user where id=?"
  34. var user User
  35.  
  36. err := DB.Get(&user, sqlstr, )
  37. if err != nil {
  38. fmt.Printf("get failed, err:%v\n", err)
  39. return
  40. }
  41.  
  42. fmt.Printf("user:%#v\n", user)
  43. }
  44.  
  45. func testQueryMulti() {
  46. sqlstr := "select id, name, age from user where id>?"
  47. var user []User
  48.  
  49. err := DB.Select(&user, sqlstr, )
  50. if err != nil {
  51. fmt.Printf("get failed, err:%v\n", err)
  52. return
  53. }
  54.  
  55. fmt.Printf("user:%#v\n", user)
  56. }
  57.  
  58. func testUpdate() {
  59. sqlstr := "update user set name=? where id=?"
  60. result, err := DB.Exec(sqlstr, "abc", )
  61. if err != nil {
  62. fmt.Printf("update failed, err:%v\n", err)
  63. return
  64. }
  65. count, err := result.RowsAffected()
  66. if err != nil {
  67. fmt.Printf("affected rows failed, err:%v\n", err)
  68. return
  69. }
  70. fmt.Printf("affect rows:%d\n", count)
  71. }
  72.  
  73. func queryDB(name string) {
  74. sqlstr := fmt.Sprintf("select id, name, age from user where name='%s'", name)
  75. fmt.Printf("sql:%s\n", sqlstr)
  76. var user []User
  77. err := DB.Select(&user, sqlstr)
  78. if err != nil {
  79. fmt.Printf("select failed, err:%v\n", err)
  80. return
  81. }
  82.  
  83. for _, v := range user {
  84. fmt.Printf("user:%#v\n", v)
  85. }
  86. }
  87.  
  88. func queryDBBySqlx(name string) {
  89. sqlstr := "select id, name, age from user where name=?"
  90. //fmt.Printf("sql:%s\n", sqlstr)
  91. var user []User
  92. err := DB.Select(&user, sqlstr, name)
  93. if err != nil {
  94. fmt.Printf("select failed, err:%v\n", err)
  95. return
  96. }
  97.  
  98. for _, v := range user {
  99. fmt.Printf("user:%#v\n", v)
  100. }
  101. }
  102.  
  103. func testSqlInject() {
  104. //queryDB("abc' or 1 = 1 #")
  105. //queryDB("name=abc' and (select count(*) from user ) < 10#")
  106. //queryDB("name=123' union select *from user #")
  107. queryDBBySqlx("name=123' union select *from user #")
  108. }
  109.  
  110. func main() {
  111.  
  112. err := initDb()
  113. if err != nil {
  114. fmt.Printf("init db failed, err:%v\n", err)
  115. return
  116. }
  117.  
  118. //testQuery()
  119. //testQueryMulti()
  120. //testUpdate()
  121. testSqlInject()
  122. }

mysql_example的更多相关文章

随机推荐

  1. loj6005 [网络流24题]最长递增子序列

    题意:给你一个序列,求不严格上升lcs长度/最多有几个没有重复元素的lcs/如果x1和xn可以多次出现,求最多有几个lcs?n<=500. 标程: #include<cstdio> ...

  2. js获取base64格式图片预览上传并用php保存到本地服务器指定文件夹

    html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  3. shell与crontab定时器的结合

    crond服务 以守护进程方式在无需人工干预的情况下来处理一些列的作业指令与服务 查看服务状态 systemctl status cron.service 停止服务 systemctl stop cr ...

  4. 关于promise的用法

    promise是一个对象,里面保存着某个未来才会结束的事件,通常是一个异步事件. promise对象的两个特点: 1.对象的状态不受外界影响:pending(进行中) fulfilled(已成功) r ...

  5. python中检测mysql的主键唯一性异常

    有两种方法: 1.直接检测是什么异常(查mysql文档找出异常代码) import os import mysql_operate.mysql_connect as mysql import re d ...

  6. js图片预加载实现!

    var myImage = (function(){ var imgNode = document.createElement( 'img' ); document.body.appendChild( ...

  7. zuul隔离机制

    文章转载自:https://blog.csdn.net/farsight1/article/details/80078099 ZuulException REJECTED_SEMAPHORE_EXEC ...

  8. php析构函数小结

    l 基本语法 class  类名{ public  function  __destruct(){ //函数体 //析构函数的最重要的作用,就是释放对象创建的资源 //比如 数据库连接, 文件句柄, ...

  9. PKUOJ 区间内的真素数

    http://bailian.openjudge.cn/tm2018/A/ #include <iostream> #include <math.h> #include < ...

  10. Cmp- Linux必学的60个命令

    1.作用 cmp(“compare”的缩写)命令用来简要指出两个文件是否存在差异,它的使用权限是所有用户. 2.格式 cmp[options] 文件名 3.[options]主要参数 -l: 将字节以 ...