1
raptium 2016-07-08 23:27:52 +08:00
都 2016 年了,你还在用字符串拼接 SQL ……
|
2
raptium 2016-07-08 23:29:09 +08:00
dbstr = "insert into zwlist(a1) values('%s')"
db.execute(dbstr, [aa]) |
3
murmur 2016-07-08 23:30:36 +08:00
如果是 php 的话用 addslashes 就可以了 其他语言直接自己实现一个 addslashes 就可以了
有的时候还真得拼接一下 比如说 like 而且像 oracle 他对%和_都敏感。。那就不安逸了 |
4
cxbig 2016-07-08 23:45:45 +08:00
ORM 在哪?
|
5
quadpixels 2016-07-09 01:45:35 +08:00
我就记得单引号在转义中是写成连续两个单引号(`''`)…
|
6
omg21 OP @raptium
dbstr = "insert into zwlist(a1) values('%s')" db.execute(dbstr, [aa]) 这样写报错: pypyodbc.ProgrammingError: ('HY000', 'The SQL contains 0 parameter markers, but 1 parameters were supplied') |
8
aprikyblue 2016-07-09 06:46:43 +08:00 via Android
为什么不查查文档呢。。
|
9
argsno 2016-07-09 07:23:36 +08:00 via Android
dbstr = "insert into zwlist(a1) values(%s)"
db.execute(dbstr, (a,)]) |
10
laoyur 2016-07-09 08:03:24 +08:00
目测一大波 sql 注入党正对楼主的服务器虎视眈眈中
|
11
magicdawn 2016-07-09 08:22:15 +08:00
Node.js 的话, 有 driver, 例如 require('mysql').escape(val) 就可以了...
不知道 python 有没... |
12
klesh 2016-07-09 10:09:42 +08:00
@magicdawn 我觉得正确的使用方式是这样的:
connection.query('INSERT INTO table VALUES (?, ?)', [a, b], cb) |
13
kaneg 2016-07-09 10:54:15 +08:00
直接上 base64 ,不过什么符号照单全收
|
14
iyaozhen 2016-07-09 12:19:01 +08:00 via Android
搞过和楼主类似的需求。
1 解析 HTML 然后格式化存储 2 base64 存进去,不过长度会增加大概 1/3 3 转义特殊字符,每个语言都有标准方法吧 |
15
freestyleyoo 2016-07-09 12:21:38 +08:00 via Android
新手不懂 2 楼所说呀,能否教教我那个语法是什么意思呢,老师只教过我 ps.setint(1,a)这样的啊, oracle 的数据库,很多时候都要用到字符串萍姐啊,真心求教,我是不是太新手了
|
16
bdbai 2016-07-09 13:16:23 +08:00 via Android
@freestyleyoo 搜索引擎和文档是你最好的老师。
|
17
magicdawn 2016-07-09 15:00:19 +08:00
@klesh
Node.js 中的 mysql.escape 以及 mysql.format, escape 输入单个值, format 调用 escape. 然后 query 调用 format 就是你说的这样... |
18
freestyleyoo 2016-07-09 17:15:19 +08:00 via Android
@bdbai 好的,谢谢你
|
19
omg21 OP @iyaozhen 可是 base64 编码后的字符串会有 b'开头,这个也没法代换到 SQL 的 values('%s')里啊
|
20
chuxiwen 2016-07-10 13:56:17 +08:00 via iPad
Prepared Statements 啊
|