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')
Go sql语句引号问题的更多相关文章
- Java中sql语句的引号问题
1..sql语句 在数据库中,当我们查询语句时,会使用类似的语句: Select * from userinfo where userid='1' or 1; Select * from userin ...
- (转载)总结一下SQL语句中引号(')、quotedstr()、('')、format()在SQL语句中的用法
总结一下SQL语句中引号(').quotedstr().('').format()在SQL语句中的用法 总结一下SQL语句中引号(').quotedstr().('').format()在SQL语句中 ...
- 总结一下SQL语句中引号(')、quotedstr()、('')、format()在SQL语句中的用法
总结一下SQL语句中引号(').quotedstr().('').format()在SQL语句中的用法 日期:2005年6月1日 作者:seasky212 总结一下SQL语句中引号(').quoted ...
- sql语句中单引号嵌套问题
在sql语句中,我们难免会用到单引号嵌套的时候,但是直接嵌套肯定是不行的,java中用反斜杠做转义符也是不行的,在sql中是用单引号来做转义符的. 比如下面例子是存储过程里查询时的语句示例 exec ...
- (转载)总结一下SQL语句中引号(')、quotedstr()、('')、format()在SQL语句中的用法
总结一下SQL语句中引号(').quotedstr().('').format()在SQL语句中的用法以及SQL语句中日期格式的表示(#).('')在Delphi中进行字符变量连接相加时单引号用('' ...
- [转]关于oracle sql语句查询时表名和字段名要加双引号的问题
oracle初学者一般会遇到这个问题. 用navicat可视化创建了表,可是就是不能查到! 后来发现②语句可以查询到 ①select * from user; 但是,我们如果给user加上双引 ...
- sql语句,加引号和不加引号的区别
今天碰到个问题,查询数据的时候,显示表不存在,在可视化窗口确实能看见.试着给表名加个引号,发现能成功查询数据了.上网查询原因如下: 1.oracle表和字段是有大小写的区别.oracle默认是大写,如 ...
- 在awk中通过system调用sql语句来说明引号的使用
一个实际应用例子: 在awk中,通过system调用连接数据库并作select操作,select语句中where条件来自于一个文件(file)的第一个域($1). $ cat file ... ... ...
- Java的sql语句 写关键字不需要添加单引号
Java的sql语句 写关键字不需要添加单引号
随机推荐
- php优秀框架codeigniter学习系列——前言
php的框架众多,笔者用过的包括thinkphp,CI,smarty,laravel,也用过一些公司自己开发的框架. thinkphp是国人自己开发的,我大概用过一段时间,基本功能都还好,应该也还比较 ...
- ios初识UITableView及简单用法一
// // ViewController.m // ZQRTableViewTest // // Created by zzqqrr on 17/8/24. // Copyright (c) 2017 ...
- Cleartext HTTP traffic to ... not permitted
Android下APP出现java.io.IOException: Cleartext HTTP traffic to dict.youdao.com not permitted,百度查了一下是And ...
- 17 多校1 Add More Zero 水题
Problem Description There is a youngster known for amateur propositions concerning several mathemati ...
- 转:openwrt 框架分析
本文是本人对OpenWrt的Makefile的理解,并非转载.OpenWrt是一个典型的嵌入式Linux工程,了解OpenWrt的Makefile的工作过程对提高嵌入式Linux工程的开发能力有极其重 ...
- Golang游戏服务器与skynet的个人直观比较
我对和GOLANG写MMO服务器的一些遐想: 1.沙盒(隔离性) SKYNET:原生LUA STATE作为沙盒, 进行服务器间隔离安全性高: 服务可以很容易的配置到不同节点之上. GO:估计用RECO ...
- redis集群cluster模式搭建
实验服务器 :192.168.44.139 192.168.44.138 192.168.44.144 在 192.168.44.139上操作: 将redis的包上传的新建的目录newtouc ...
- Android动态添加Device Admin权限
/********************************************************************** * Android动态添加Device Admin权限 ...
- angular checkbox
Error: ngModel:constexpr Non-Constant Expression 1.3版本 <input type="checkbox" ng-model= ...
- templates的语法
1.变量 1.作用:将后端的数据传递到模板进行显示 2.允许作为变量的数据类型 字符串,整数,列表,元组,字典,函数,对象 3.变量的语法 变量传递给前端必须要封装到字典中才能传递给模板 1.使用 l ...