2017-02-02 21 views
0

使用python 3.5中的SQLite3的輸入來添加用戶信息到數據庫。但是,一旦我獲得數據並插入到數據庫中,而不是將數據插入到列中,它告訴我沒有列。 我得到的錯誤如下:在sqlite 3中插入值但作爲列名出現

異常在Tkinter的回調 回溯(最近通話最後一個):

File "C:\Users\Luke_2\AppData\Local\Programs\Python\Python35-32\lib\tkinter__init__.py", line 1549, in call return self.func(*args) File "C:\Users\Luke_2\Desktop\Computing\Coursework\live\current.py", line 303, in details cur_user.execute("INSERT INTO LogIn(Email,Password) VALUES("+user+","+passw+")") sqlite3.OperationalError: no such column: a

而且在我的代碼這樣做是如下的功能:

def details(): 
    user = email_sign.get() 
    user1 = email1_sign.get() 
    passw = password_sign.get() 
    password1 = password1_sign.get() 
    if user == user1 and passw == password1: 
     cur_user.execute("INSERT INTO LogIn(Email,Password) VALUES("+user+","+passw+")") 
     conn_user.commit() 

    else: 
     print("please try again") 
+0

試試這個行:cur_user.execute(「INSERT INTO登錄信息(電子郵件,密碼)VALUES('%s','%s')「%(user,passw)) –

+0

@DenisV多數民衆贊成在完美,謝謝 – HalfIrish

+0

@DenisV它是遠非完美,因爲仍然受到SQL注入... –

回答

3

這是因爲您實際執行的請求沒有引用值,所以名稱被解釋爲列名,但是是SQL引擎。如果你通過ab分別將執行

INSERT INTO LogIn(Email,Password) VALUES(a,b) 

時,所需要的是

INSERT INTO LogIn(Email,Password) VALUES('a','b') 

,但你應該從未到!建設請求的方式,但硬編碼請求中的參數幾十年來一直是SQL injection問題的原因。

正確的方法是建立一個參數要求:

cur_user.execute("INSERT INTO LogIn(Email,Password) VALUES(?,?)", (user, password)) 

簡單,更智能,不受SQL注入......