2017-02-02 8 views
0

Im mit Eingaben von SQLite3 in Python 3.5, um Benutzerinformationen zu einer Datenbank hinzuzufügen. Sobald ich jedoch die Daten erhalte und sie in die Datenbank einfüge, sagt sie mir, dass es keine Spalte gibt, anstatt die Daten in die Spalten einzufügen. Der Fehler I ist wie folgt:Einfügen von Werten in SQLite 3, aber erscheinen als Spaltennamen

Exception in Tkinter Rückruf Traceback (jüngste Aufforderung zuletzt):

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

und die Funktion in meinem Code tut dies wie folgt:

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

diese Zeile Versuchen: cur_user.execute ("IN LogIn INSERT (E-Mail, Passwort) VALUES ('% s', '% s') "% (user, passw)) –

+0

@DenisV das ist perfekt, danke – HalfIrish

+0

@DenisV es ist weit von perfekt, weil immer noch SQL-Injektion unterliegen ... –

Antwort

3

Das liegt daran, dass die Anfrage, die Sie tatsächlich ausführen, keine Anführungszeichen um die Werte hat. Daher werden die Namen als Spaltennamen interpretiert, aber die SQL-Engine. Wenn Sie a und b jeweils passieren Sie

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

auszuführen, wenn, was erforderlich ist, ist

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

Aber sollten Sie nie zu, dass! Bauanträge auf diese Weise, aber Hardcoding Parameter in der Anfrage war die Ursache für SQL injection Probleme seit Jahrzehnten.

Der richtige Weg, um eine parametrisierte Anfrage bauen:

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

einfacher, intelligente und immun gegen SQL-Injection ...

Verwandte Themen