我找不到解决方案。 你能帮帮我解决这个问题吗?
dic={'username':u'\uc774\ud55c\ub098','userid':u'david007', 'nation':u'\ub300\ud55c\ubbfc\uad6d'}
c=MySQLdb.connect(host=ddb['host'],user=ddb['user'],passwd=ddb['passwd'],db=ddb['db'], use_unicode=True, charset="utf8")
s=c.cursor()
sql="INSERT INTO "+db+" "+col+" VALUES "+str(tuple(dic.values()))
s.execute(sql)
"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 ''\\uc774\\ud55 ... at line 1")
print sql
INSERT INTO user_tb (username, userid, nation) VALUES (u'\uc774\ud55c\ub098', u'david007', u'\ub300\ud55c\ubbfc\uad6d')
错误是:
答案 0 :(得分:4)
您需要使用参数化查询:
sql = "INSERT INTO " + db + " " + col + " VALUES (%s, %s, %s)"
s.execute(sql, dic.values())
当您简单地将元组连接到查询时,unicode字符串的u
前缀将使这些字符串无效SQL。使用参数MySQLdb,将使用参数替换(即将unicode字符串编码为字节表示)并生成有效的SQL来做正确的事情。
无论如何,作为一般原则,您应该始终在查询中使用参数来阻止SQL注入。