newLISP处理mysql escape character
来源:互联网 发布:淘宝鞋子女款冬季学生 编辑:程序博客网 时间:2024/05/06 12:24
什么是转义字符
mysql的escape character指的是需要转义的特殊字符,这些字符出现在sql语句中,如果没有转移会导致sql语法报错或者有sql注入攻击的可能。
主要有以下几种都需转义:
\x00, \n, \r, \, ', " and \x1a.
比如' 就需要变成\'
下面是sql测试:
mysql> INSERT INTO nodes(name) VALUES ('select a.dt, count(*), count(distinct a.uv) from (select dt, case when p2 in ('04', '06')') ;ERROR 1064 (42000): 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 '04', '06')')' at line 1
出错原因是字符串值中又出现了 ' 符号, 比如:'04'
解决方法是在前面加上\
INSERT INTO nodes(name) VALUES ('select a.dt, count(*), count(distinct a.uv) from (select dt, case when p2 in (\'04\', \'06\')');Query OK, 1 row affected (0.04 sec)
newLISP解决方案
mysql client 已经提供了一个C函数mysql_real_escape_string
newlisp的artful mysql模块已经使用之。
(import libmysqlclient "mysql_real_escape_string")
直接使用:escape函数,内部使用了上面的mysql_real_escape_string函数。
> (load "/opt/newlisp_util/mysql.lsp")MAIN> (setf db-src (Mysql))(Mysql 27962464)> (:escape db-src "select dt, case when p2 in ('04', '06')")"select dt, case when p2 in (\\'04\\', \\'06\\')\000
这样在运行拼接sql语句后,可以通过:escape函数做一次处理
也可以使用:query的高级形式:
;; (:query db '("SELECT id FROM employees WHERE name = %s" '("Johnson, John")));; ; SQL generated: SELECT id FROM employees WHERE name = 'Johnson, John';; => (MysqlResult 1069216)
这里同时解决了SQL语句格式化拼接问题和处理escape字符问题。
只需要将值组成list,然后作为最后一个参数传递给query函数。
0 0
- newLISP处理mysql escape character
- 什么是换码符(escape character)?
- cmd escape character ^
- Escape character is '^]'.
- Common Escape Character of URL
- 转义字符(Escape character)
- Escape and read special character
- newLISP访问MySQL中文乱码
- JAVAScript 转义字符(Escape Character)
- #194-D unrecognized character escape sequence
- 解决telnet提示Escape character is ‘^]’.
- newlisp按行处理日志文件
- newLISP 将数据存入mysql datetime字段
- mysql % _ 和 ESCAPE
- MYSQL escape用法
- HTML字符实体(Character Entities),转义字符串(Escape Sequence
- 解决telnet Escape character is '^]'. 状态下怎么退出?
- linux/unix下telnet提示Escape character is '^]'的意义
- 杭电2019最简单插入格式控制
- ubuntu配置SSH免密码登陆
- 百度PCS快速获取access_token的方法
- 水电费果冻粉水电费依然有
- BroadcastReceiver应用详解
- newLISP处理mysql escape character
- UI基础第十四弹:实现UItableview控件Cell数据刷新
- 的冯绍峰和发货后
- Is not configured
- Flash Player、AIR、Flex SDK 大全
- hibernate多对一和一对多双向关联
- Android中SQLite应用详解
- 4 - Swift之1 - 简单的按钮与事件
- AsyncTask的使用