展开目录
golang 实现mysql Quote方法
golangmysql
X
陈尼玛的博客
记录开发生涯的踩坑经历,用时间来验证成长
加载中

golang的mysql组件我用的是go-sql-driver/mysql。但用的时候发现这货除了参数化查询以外,没有提供其他安全的方法拼接sql语句。

go-sql-driver/mysql

php里的**mysql_real_escape_string()**这种这么强大的方法居然都不支持!简直坑了个爹,为了少一些垃圾代码,我自己写一个简易版的转义方法,命名为Quote(),因为写php的时候用习惯了zend框架。

mysql参数实际上需要转义的有这几个:

\
'
"
\n
\r
\x1a
\0

所以实现代码如下:

func Quote(value string) string {
  replace := []string{
    `\\`,`\\\\`,
    `'`,`\'`,
    `\0`,`\\0`,
    "\n","\\n",
    "\r","\\r",
    `"`,`\"`,
    "\x1a","\\\\Z",
  }
  for i:=0 ;i<len(replace); i++ {
    if i%2>0 {continue}
    value = strings.Replace(value, replace[i], replace[i+1], -1)
  }
  return "'"+value+"'";
}

测试代码:

package main
import (
  "strings"
  "fmt"
)


func Quote(value string) string {
  replace := []string{
    `\\`,`\\\\`,
    `'`,`\'`,
    `\0`,`\\0`,
    "\n","\\n",
    "\r","\\r",
    `"`,`\"`,
    "\x1a","\\\\Z",
  }
  for i:=0 ;i<len(replace); i++ {
    if i%2>0 {continue}
    value = strings.Replace(value, replace[i], replace[i+1], -1)
  }
  return "'"+value+"'";
}


func main() {

s:=Quote(`{"name":"ccc","img":"\/uploads\/2017\/07\/28\/61\/\/combig-faf780aafdc8228b68406b98b9f36c4423.png","factory":"","brandname":"z123","url":"\/pc\/baixing\/detail?id=56"}`)

fmt.Println(s)

}

相关文档

暂无

随便看看

  1. sqlite 查看table的构建语句

  2. css多行文本超出截断显示省略号

  3. css3 文字渐变色

  4. nodejs socks5

  5. 树莓派实现用pi用户自动登录

  6. mongodb 批量修改字段语句

  7. 树莓派 3B/3B+ usb启动

  8. mongodb2.4 添加用户

  9. python下载文件,带进度条控制

  10. mac搜索局域网内的主机

  11. 树莓派配置wifi

  12. bootstrap modal弹框导致ie无法获取焦点

  13. 数据库清理优化

  14. 配置mysql ssl连接

  15. html表格导出csv文件并下载

  16. 前端性能观察器

畅言模块加载中