sql = "INSET INTO Info VALUES(null,%s,'%s','%s','%s',%s,'%s',%s,%s,%s)"
cur = self.db.cursor()
try:
v = []
for i in self.informations:
v.append((i.source.id, i.title, i.content, i.time, i.scratchtime, i.url, i.value, i.memo, i.importance))
return cur.executemany(sql, v)
finally:
cur.close()
其中i.content是html的字符串,所以就在这里报错了。错误信息如下:
_mysql_exceptions.ProgrammingError: (1064, "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 'INSET INTO Info VALUES(null,1,''\xe6\x9f\x90GPS\xe7\xb3\xbb\xe7\xbb\x9f\xe4\xb8\xa5\xe9\x87\x8d\xe9\x97\xae\xe9\xa2\x98\xef\xbc\x8c\xe5\x8f\xaf\xe6\x8e\xa7\xe5\x88\xb65400\xe5\xa4\x9a\xe8\xbe\x86' at line 1")
我在想是不是因为html字符串中有类似',"之类的造成 像sql injection一样的注入的问题。
请问我该怎样存此等字符串,谢谢
5 个解决方案
#1
字符编码的问题
#2
进行转义?
#3
我打算试一下把这个字段改成blob来存吧。
#4
hi all,通过查找资料,我发现只要将content对应的语句位置处放置%r即可,自动转码存入,但是现在它存入的形式如下:
'xe6xa8xa1xe4xbbxbfxe8x9bxaexe5x83x8fxe7x9ax84xe9x98xbfxe9x87x8cxe5xb7xb4xe5xb7xb4xe7x99xbbxe9x99x86xe9xa1xb5xe9x9dxa2'
能看出来是每个字节的hex形式,utf8形式了,每次读取出来就是这样的形式而不是通常的汉字,
我用了db.escape,db.escape_string等函数都没有用,我看官方的api文档中也没有提及,请各位指点一二了。
'xe6xa8xa1xe4xbbxbfxe8x9bxaexe5x83x8fxe7x9ax84xe9x98xbfxe9x87x8cxe5xb7xb4xe5xb7xb4xe7x99xbbxe9x99x86xe9xa1xb5xe9x9dxa2'
能看出来是每个字节的hex形式,utf8形式了,每次读取出来就是这样的形式而不是通常的汉字,
我用了db.escape,db.escape_string等函数都没有用,我看官方的api文档中也没有提及,请各位指点一二了。
#5
经查明是我的问题,用%s即可。散分
#1
字符编码的问题
#2
进行转义?
#3
我打算试一下把这个字段改成blob来存吧。
#4
hi all,通过查找资料,我发现只要将content对应的语句位置处放置%r即可,自动转码存入,但是现在它存入的形式如下:
'xe6xa8xa1xe4xbbxbfxe8x9bxaexe5x83x8fxe7x9ax84xe9x98xbfxe9x87x8cxe5xb7xb4xe5xb7xb4xe7x99xbbxe9x99x86xe9xa1xb5xe9x9dxa2'
能看出来是每个字节的hex形式,utf8形式了,每次读取出来就是这样的形式而不是通常的汉字,
我用了db.escape,db.escape_string等函数都没有用,我看官方的api文档中也没有提及,请各位指点一二了。
'xe6xa8xa1xe4xbbxbfxe8x9bxaexe5x83x8fxe7x9ax84xe9x98xbfxe9x87x8cxe5xb7xb4xe5xb7xb4xe7x99xbbxe9x99x86xe9xa1xb5xe9x9dxa2'
能看出来是每个字节的hex形式,utf8形式了,每次读取出来就是这样的形式而不是通常的汉字,
我用了db.escape,db.escape_string等函数都没有用,我看官方的api文档中也没有提及,请各位指点一二了。
#5
经查明是我的问题,用%s即可。散分