Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python mysql准备的语句足够了,还是需要escape_string()?_Python_Mysql - Fatal编程技术网

Python mysql准备的语句足够了,还是需要escape_string()?

Python mysql准备的语句足够了,还是需要escape_string()?,python,mysql,Python,Mysql,这就是: 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_st

这就是:

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)))

只要不是格式化的字符串,而且它们确实是准备好的语句,您就不必担心


它可能会导致更多的问题,不值得两次逃避。

第一个代码示例已经可以安全地防止SQL注入。第二个示例将导致数据库中出现额外的引号,这很可能不是您想要的;第二个选项将加倍您的努力,例如用
\“
替换
\”
。你可以自己测试一下

>>> c.execute("SELECT %s, %s", ('"', MySQLdb.escape_string('"')))
1L
>>> c.fetchall()
((u'"', u'\\"'),)
因此,您可以看到第二个版本会在
之前生成一个不必要的
\
。因此第一个版本是可以的。

两次转义总是会导致问题。