这就是:
cursor.execute("Insert INTO visit (pid, date, diagnosisid) VALUES (%s,%s,%s)",
(pid, date, diagnosisid))
足够或我需要:
cursor.execute("Insert INTO visit (pid, date, diagnosisid) VALUES (%s,%s,%s)",
(escape_string(pid), escape_string(date), escape_string(diagnosisid)))
答案 0 :(得分:3)
第一个代码示例已经可以安全地防止SQL注入。第二个示例将在您的数据库中引入其他引号,这很可能不您想要的内容。
答案 1 :(得分:3)
第一个就足够了;第二个会加倍努力,取而代之的是"
\"
>>> c.execute("SELECT %s, %s", ('"', MySQLdb.escape_string('"')))
1L
>>> c.fetchall()
((u'"', u'\\"'),)
。您可以使用
\
所以你看到第二个版本会在"
之前产生一个不需要的{{1}}。所以第一个是好的。
答案 2 :(得分:0)
只要它不是格式化的字符串并且它们确实是准备好的语句,您就不必担心。
它可能会导致更多的问题,而不是两次逃避它的价值。