mysqldb:Select/execute/escape\u字符串出错

2024-07-05 14:05:46 发布

您现在位置:Python中文网/ 问答频道 /正文

在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

+-------------------------+------------------------------+

Tags: 代码fromimportflaskstringversionmysqlusername
2条回答

下面的代码对我有效,查询变量x返回“1L”

`param1="john"
 x = c.execute("""SELECT * FROM users WHERE username = %s """, (param1,))
`

虽然我不太明白下面的代码为什么不起作用

^{pr2}$

param1="john"
x = c.execute("""SELECT * FROM users WHERE username = %s """ , (param1))

您知道SQL注入的危险性。很好。在

您甚至可以使用非常安全的execute:参数化查询)。以这种方式进行查询时,根本不需要转义。execute这一切都是为了你。因此,解决方案是:

x       = c.execute("SELECT * FROM users WHERE username = %

s“,(用户名,))

如果执行以下操作,则需要进行转义(使用所需的import):

^{pr2}$

要进一步讨论,请看Python MySQL Parameterized Queries

相关问题 更多 >