Ich begann Skripting in Python und ich lief ein in seltsames Problem.Python CGI-Skript fügt nur ganze Zahlen in MySQL-Datenbank
Ich versuche, einige Werte in Mysql-Datenbank einzufügen. Datenbankfelder sind varchar, utf-8 Unicode
Verwendung von Python 3.2 und wamp Server 2.2 (Apache 2.2.21, MySQL 5.5.20)
Wenn ich versuche, Druck (ime), Print (prezime) usw. es druckt Werte eines Formulars von einer anderen Seite, also bekomme ich korrekte Werte.
wenn ich schreibe SQL-Anweisung wie:
"INSERT INTO Clanovi(CL_Ime,CL_Prezime, CL_Email, CL_Tel) VALUES ("aa","aa","aa","aa")"
es, diese Werte in die Datenbank einfügt
wenn ich schreibe:
sql = "INSERT INTO Clanovi(CL_Ime,CL_Prezime, CL_Email, CL_Tel) VALUES (%s,%s,%s,%s)",(ime,prezime,email,tel)
es
nicht funktioniert finaly wenn ich setzen
sql = "INSERT INTO Clanovi (CL_Ime, CL_Prezime, CL_Email, CL_Tel) VALUES (% s,% s,% s,% s)" % (ime, prezime, E-Mail, Telefon)
wenn ich nur setzen Zahlen in Formularfelder wird es zur Datenbank verpflichten (neue Daten hinzufügen) ime = 21 prezime = 232 email = 123 tel = 123 Wenn ich etwas anderes wie Buchstaben lege, fügt es keine neue Zeile in die Datenbank ein ime = etw prezime = blabla email = aa tel = dada
(ich weiß, dass diese Methode Sicherheitsrisiko hat)
hier ist ganz Code (I geputtet print (sQL) nur um zu sehen, was meine Frage, wie am Ende aussieht)
#!c:\python32\python.exe
import MySQLdb
import cgi
print ("Content-type: text/html\n\n")
form = cgi.FieldStorage()
ime =form["ime"].value
prezime = form["prezime"].value
email= form["email"].value
tel = form["tel"].value
print(ime)
db = MySQLdb.connect("localhost","root","","biblioteka")
cursor = db.cursor()
sql = "INSERT INTO Clanovi(CL_Ime,CL_Prezime, CL_Email, CL_Tel) VALUES (%s,%s,%s,%s)"%(ime,prezime,email,tel)
print(sql)
try:
cursor.execute(sql)
db.commit()
except:
db.rollback()
db.close()
Vielen Dank für Ihre Zeit und Hilfe.
http://en.wikipedia.org/wiki/SQL_injection und auch das Argument der Parameter 'von cursor.execute() – SingleNegationElimination