• Go sql语句引号问题


    使用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')

  • 相关阅读:
    Swift
    Swift
    UVa
    Go如何发送广播包
    人迹罕至的android要完全退出程序的一种方法
    备注ocp_ORACLE专题网络
    JS它DOM
    HDU 1693 Eat the Trees 插头DP
    ubuntu-14.04 系统安装mysql-5.6.21
    1941设置站点模板,一生珍藏,所有玩具
  • 原文地址:https://www.cnblogs.com/lanyangsh/p/8727078.html
Copyright © 2020-2023  润新知