MySQLdb存入HTML字符串的问题

时间:2022-11-20 21:10:34

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文档中也没有提及,请各位指点一二了。

#5


经查明是我的问题,用%s即可。散分

#1


字符编码的问题

#2


进行转义?

#3


我打算试一下把这个字段改成blob来存吧。

#4


hi all,通过查找资料,我发现只要将content对应的语句位置处放置%r即可,自动转码存入,但是现在它存入的形式如下:
'xe6xa8xa1xe4xbbxbfxe8x9bxaexe5x83x8fxe7x9ax84xe9x98xbfxe9x87x8cxe5xb7xb4xe5xb7xb4xe7x99xbbxe9x99x86xe9xa1xb5xe9x9dxa2'
能看出来是每个字节的hex形式,utf8形式了,每次读取出来就是这样的形式而不是通常的汉字,
我用了db.escape,db.escape_string等函数都没有用,我看官方的api文档中也没有提及,请各位指点一二了。

#5


经查明是我的问题,用%s即可。散分