• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Gosql语句引号问题

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

使用Go进行Mysql开发时,会遇到引号问题(实际上,与语言无关,只要使用sql就会遇到这些类似问题)。

本文举例说明如何解决这些问题。

Example1

第一例子演示格式字符是否要加引号。

代码如下:

detailMsg := "abc"

sql := fmt.Sprintf(
   "insert into tbl_log(ip, name, detail_msg) values ('%s', '%s', %s)",
    "1.1.0.1",
     "test.py",
     detailMsg,
)
fmt.Println("sql: ", sql)

output:

2018/04/05 17:40:00 sql: insert into tbl_log(ip, name, detail_msg) values ('1.1.0.1', 'test.py', abc)
2018/04/05 17:40:00 exec failed: Error 1054: Unknown column 'abc' in 'field list' , sql: insert into tbl_log(ip, name, detail_msg) values ('1.1.0.1', 'test.py', abc)

如果字段类型是字符串,格式化字符需要加上两个单引号,也就是格式字符%s改为'%s' .

正确示例

detailMsg := "abc"
sql := fmt.Sprintf(
         "insert into tbl _log(ip, name, detail_msg) values ('%s', '%s', '%s')",
          "1.1.0.1",
          "test.py",
          detailMsg,
        )

fmt.Println("sql: ", sql)

output

sql: insert into tbl_log(ip, name, detail_msg) values ('1.1.0.1', 'test.py', 'abc')

Example2

如果插入的内容中包含单引号,例子如下。

也就是detailMsg中如果有单引号。

detailMsg := "ab'c"
fmt.Println("detailMsg: ", detailMsg)
sql := fmt.Sprintf(
         "insert into tbl_log(ip, name, detail_msg) values ('%s', '%s', '%s')",
          "1.1.0.1",
          "test.py",
          detailMsg,
        )

fmt.Println("sql: ", sql)

output

2018/04/05 17:45:03 detailMsg: ab'c
2018/04/05 17:45:03 sql: insert into tbl _log(ip, name, detail_msg) values ('1.1.0.1', 'test.py', 'ab'c')
2018/04/05 17:45:03 exec failed: Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'c')' at line 1 , sql: insert into tbl_log(ip, name, detail_msg) values ('1.1.0.1', 'test.py', 'ab'c')

解决办法

对内容中的单引号进行转义 '.

detailMsg:= "ab'c"
detailMsg = strings.Replace(detailMsg, "'", "\\'", -1)
log.Println("detailMsg:", detailMsg)


sql := fmt.Sprintf(
  "insert into tbl_log(ip, name, detail_msg) values ('%s', '%s', '%s')",
   "1.1.0.1",
   "test.py",
   detailMsg,
)

log.Println("sql:", sql)

output:

2018/04/05 17:48:11 detailMsg: ab'c
2018/04/05 17:48:11 sql: insert into tbl_log(ip, name, detail_msg) values ('1.1.0.1', 'test.py', 'ab'c')


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
golang依赖管理从GOPATH到gomod发布时间:2022-07-10
下一篇:
[GO]解决vscode中Golang环境使用部分插件被墙的问题发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap