在linux2上的Python2.7.10[GCC 5.2.1 20151010]上执行此代码
import flask
from MySQLdb import escape_string as thwart
username="abc"
conn = MySQLdb.connect(host="localhost",user="root", passwd="xxxxxxx", db="pythonprogramming")
c = conn.cursor()
x = c.execute("SELECT * FROM users WHERE username = (%s)", (thwart(username)))
我得到以下错误:
^{pr2}$这是我电脑上的MySQL版本
+-------------------------+------------------------------+
| Variable_name | Value
+-------------------------+------------------------------+
| innodb_version | 5.7.11
| protocol_version | 10
| slave_type_conversions |
| tls_version | TLSv1,TLSv1.1
| version | 5.7.11
| version_comment | MySQL Community Server (GPL) |
| version_compile_machine | x86_64
| version_compile_os | Linux
+-------------------------+------------------------------+
下面的代码对我有效,查询变量x返回“1L”
虽然我不太明白下面的代码为什么不起作用
^{pr2}$和
您知道SQL注入的危险性。很好。在
您甚至可以使用非常安全的
execute
:参数化查询)。以这种方式进行查询时,根本不需要转义。execute
这一切都是为了你。因此,解决方案是:s“,(用户名,))
如果执行以下操作,则需要进行转义(使用所需的
^{pr2}$import
):要进一步讨论,请看Python MySQL Parameterized Queries
相关问题 更多 >
编程相关推荐