我正在使用 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 '$2b$12$0NwXT7hoHPBK.ywn/r5f3OWQKrF9o1/wUJt7u1eFtn3Se2XCmiXdm'')' at line 1
我的表名是hassle_free_register表結構如下:
---------- -------------- ------ ----- --------- ----------------
| 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 框架。
uj5u.com熱心網友回復:
HASHEDPASS顯然包含一個'字符,它'{USER_PASSWORD}'提前結束了字串。
使用引數cursor.execute()而不是將變數直接替換到 SQL 字串中。
mycursor.execute("insert into Hassle_Free_Register(USERNAME,PASSWORD) values(%s, %s);", (NAME, HASHEDPASS))
uj5u.com熱心網友回復:
你看到問題了嗎?您的散列密碼包含單引號。這搞砸了你的報價。所以,讓資料庫連接器來做:
mycursor.execute("INSERT INTO HassleFree_Register(USERNAME,PASSWORD) VALUES(?,?);", (NAME, HASHEDPASS))
根據資料庫,您可能需要%s而不是?.
作為文體說明,將所有大寫字母用于變數名稱不被認為是一種好形式。這對全域常量沒問題,但變數應該是usernameor user_name。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/349373.html
