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语句 写关键字不需要添加单引号
随机推荐
- thinkphp5.1学习笔记
由于新公司使用的框架是thinkphp5.1,有必要进一步学习,看来我要把php框架使用完全了,之前就用过laravel和CI框架了. 现在打算只是一个学习的记录,结构会比较凌乱,基本我估计只能自己看 ...
- python分析nginx自定义日志
# -*- coding:utf-8 -*- import datetimeimport re logfile = '''192.168.23.43 - 2017-12-14:00:14:41 /se ...
- 在Intellij IDEA中修改模板中user变量名称
在Intellij IDEA中的注释模板中的${user}名称是根据当前操作系统的登录名来取的,有时候登录名称和我们实际的user名称并不相同. 修改方法如下: 方法一:可以在settings的fil ...
- Spring Boot 揭秘与实战(二) 数据缓存篇 - 快速入门
文章目录 1. 声明式缓存 2. Spring Boot默认集成CacheManager 3. 默认的 ConcurrenMapCacheManager 4. 实战演练5. 扩展阅读 4.1. Mav ...
- 解决react-native软键盘弹出挡住输入框的问题
解决react-native软键盘弹出挡住输入框的问题 写登录页面,整体界面居中之后就出现软键盘弹出挡住输入框,用户体验不好的情况.用了RN官方的KeyboardAvoidingView组件,会有多出 ...
- 异常值检测 —— MAD(median absolute deviation)
MAD 定义为,一元序列 Xi" role="presentation">XiXi 同其中位数偏差的绝对值的中位数(deviation,偏差本身有正有负): MAD ...
- 网页筛选Automatic Input Enrichment - FLAIR
http://www.cs.rochester.edu/~tetreaul/Presentations-and-Posters/0504.pdf 介绍了一个在线平台https://eflnotes.w ...
- Hive错误:Permission denied: user=anonymous, access=EXECUTE, inode=”/tmp”
由于Hive没有hdfs:/tmp目录的权限,赋权限即可: hdfs dfs -chmod -R 777 /tmp
- 07 Object类,Scanner,Arrays类,String类,StringBuffer类,包装类
Object类的概述:* A:Object类概述 * 类层次结构的根类 * 所有类都直接或者间接的继承自该类* B:构造方法 * public Object() * 子类的构造 ...
- acm 2044
////////////////////////////////////////////////////////////////////////////////#include<iostream ...