1064 (42000): 你的 SQL 语法有误;
1064 (42000): You have an error in your SQL syntax;
我正在使用 MYSQL 来存储用户名及其相应的加盐和散列密码,它不断给我这个错误。
1064 (42000): 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 'b[=11=]NwXT7hoHPBK.ywn/r5f3OWQKrF9o1/wUJt7u1eFtn3Se2XCmiXdm'')' at line 1
我的 Table 名字是 hassle_free_register 它 table 结构如下:
+----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+----------------+
| USER_ID | int | NO | PRI | NULL | auto_increment |
| USERNAME | varchar(255) | NO | UNI | NULL | |
| PASSWORD | varchar(255) | NO | | NULL | |
+----------+--------------+------+-----+---------+----------------+
存储密码的代码:
@app.route('/register' ,methods =['POST'])
def register():
try:
NAME = request.form['USER_NAME']
PASSWORD = request.form['USER_PASSWORD']
if(len(NAME)==0):
raise ValueError("USERNAME CANNOT BE EMPTY")
if(len(PASSWORD)<=8):
raise ValueError("PASSWORD LENGTH TOO SHORT")
if(len(PASSWORD)>=30):
raise ValueError("PASSWORD LENGTH TOO LONG")
HASHEDPASS = bcrypt.hashpw(PASSWORD.encode('utf-8'),bcrypt.gensalt())
mycursor.execute("insert into Hassle_Free_Register(USERNAME,PASSWORD) values('{USER_NAME}','{USER_PASSWORD}');".format(USER_NAME = NAME,USER_PASSWORD = str(HASHEDPASS)))
mydb.commit()
return jsonify("REGISTERED SUCCESSFULLY")
except ValueError as error:
return jsonify({"message":str(error)}),403
except mysql.connector.Error as error:
print(error)
# return error
return jsonify({"message":str(error)}), 404
请帮忙!我正在使用 Flask 框架。
HASHEDPASS
显然包含一个 '
字符,它提前结束字符串 '{USER_PASSWORD}'
。
使用参数 cursor.execute()
而不是直接将变量代入 SQL 字符串。
mycursor.execute("insert into Hassle_Free_Register(USERNAME,PASSWORD) values(%s, %s);", (NAME, HASHEDPASS))
你看到问题了吗?您的散列密码包含单引号。那搞砸了你的报价。所以,让数据库连接器来做吧:
mycursor.execute("INSERT INTO HassleFree_Register(USERNAME,PASSWORD) VALUES(?,?);", (NAME, HASHEDPASS))
根据数据库的不同,您可能需要 %s
而不是 ?
。
作为文体注意事项,将全部大写用于变量名被认为不是好的形式。这对全局常量没问题,但变量应该是 username
或 user_name
.
我正在使用 MYSQL 来存储用户名及其相应的加盐和散列密码,它不断给我这个错误。
1064 (42000): 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 'b[=11=]NwXT7hoHPBK.ywn/r5f3OWQKrF9o1/wUJt7u1eFtn3Se2XCmiXdm'')' at line 1
我的 Table 名字是 hassle_free_register 它 table 结构如下:
+----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+----------------+
| USER_ID | int | NO | PRI | NULL | auto_increment |
| USERNAME | varchar(255) | NO | UNI | NULL | |
| PASSWORD | varchar(255) | NO | | NULL | |
+----------+--------------+------+-----+---------+----------------+
存储密码的代码:
@app.route('/register' ,methods =['POST'])
def register():
try:
NAME = request.form['USER_NAME']
PASSWORD = request.form['USER_PASSWORD']
if(len(NAME)==0):
raise ValueError("USERNAME CANNOT BE EMPTY")
if(len(PASSWORD)<=8):
raise ValueError("PASSWORD LENGTH TOO SHORT")
if(len(PASSWORD)>=30):
raise ValueError("PASSWORD LENGTH TOO LONG")
HASHEDPASS = bcrypt.hashpw(PASSWORD.encode('utf-8'),bcrypt.gensalt())
mycursor.execute("insert into Hassle_Free_Register(USERNAME,PASSWORD) values('{USER_NAME}','{USER_PASSWORD}');".format(USER_NAME = NAME,USER_PASSWORD = str(HASHEDPASS)))
mydb.commit()
return jsonify("REGISTERED SUCCESSFULLY")
except ValueError as error:
return jsonify({"message":str(error)}),403
except mysql.connector.Error as error:
print(error)
# return error
return jsonify({"message":str(error)}), 404
请帮忙!我正在使用 Flask 框架。
HASHEDPASS
显然包含一个 '
字符,它提前结束字符串 '{USER_PASSWORD}'
。
使用参数 cursor.execute()
而不是直接将变量代入 SQL 字符串。
mycursor.execute("insert into Hassle_Free_Register(USERNAME,PASSWORD) values(%s, %s);", (NAME, HASHEDPASS))
你看到问题了吗?您的散列密码包含单引号。那搞砸了你的报价。所以,让数据库连接器来做吧:
mycursor.execute("INSERT INTO HassleFree_Register(USERNAME,PASSWORD) VALUES(?,?);", (NAME, HASHEDPASS))
根据数据库的不同,您可能需要 %s
而不是 ?
。
作为文体注意事项,将全部大写用于变量名被认为不是好的形式。这对全局常量没问题,但变量应该是 username
或 user_name
.