golang的mysql组件我用的是go-sql-driver/mysql
。但用的时候发现这货除了参数化查询以外,没有提供其他安全的方法拼接sql语句。
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)
}
相关文档
暂无
随便看看
畅言模块加载中