1
zyftank OP 还有种办法也能正常实现,就是改 sql 语句。
sql = "insert into table_name(cl1,cl2) value('"+arg1+"','"+arg2+"')" |
2
iyaozhen 2020-10-19 13:12:44 +08:00
正常 sql 里面,插入字符串需要单引号 ''
cur.execute(sql,[arg1,arg2]) 这样可以是因为做了参数绑定 |
3
zyftank OP 搞了半天,还是数据类型的问题,在写 sql 语句之前,已经进行了类型转换、调试打印,测试类型。就是没有打印 sql 语句,其实打印一下 sql 语句,问题就会明白了,其实还可以这样改。
sql ="insert table_name(cl1,cl2) value('%s','%s')" %(arg1,arg2) |
4
est 2020-10-19 13:33:38 +08:00 1
大体是上是这么实现的,也能插入数据,可是 arg1 这个数据插入后,不是‘2012-01-15'这个值,而是一个其他的年份,确实令人费解。
这不费解啊。。values (2012-01-15, 1) 等于 values (1996, 1) 啊。 因为 2012-01-15 == 1996 |
5
raymanr 2020-10-19 13:35:32 +08:00 1
cur.execute(sql,[arg1,arg2])
多使用这种方法好点, 拼接 sql 会导致注入问题, 就算是自己使用, 也不能很好的处理带有 \ ' 等字符的数值 |
6
zhangysh1995 2020-10-19 13:40:13 +08:00
|
8
LGA1150 2020-10-19 16:34:47 +08:00
尽量使用参数化查询,不要手动拼接,如果 arg2 是 '1); DROP TABLE table_name; --' 就出大问题了🐶
|
9
hhyvs111 2020-10-20 10:13:23 +08:00
兄弟怕是大学生吧,这么容易 sql 注入的代码都写得出来
|