Yritän lisätä seuraavalla koodilla elokuvan nimeä ja imdb linkkiä tietokantaan.
cursor.execute("INSERT INTO moviedb (name, imdb) VALUES ('%s', '%s')" % (name, imdb))
Ongelmia tuottaa nimen "caveman's valentine" lisääminen, koska nimessä on tuo '-merkki. Alla virheilmoitus.
_mysql_exceptions.ProgrammingError: (1064, "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 's Valentine, The', '2001', '30.05.03', '1', 'http://www.imdb.com/find?q=Caveman'' at line 1")
Kuinka tuo ongelma ratkaistaan yksinkertaisimmillaan?
Mod. lisäsi kooditagit
Kotitehtävä: mitä tapahtuu, jos lisäät seuraavan nimen:
', ''); DROP TABLE moviedb
Avainsana on escape. En tunne Pythonin MySQL-kirjastoja, mutta Google pulautti funktion MySQLdb.escape_string
. Hakusanoina voit kokeilla sellaisia kuin MySQL, Python ja escape.
Aina kun lisäät elokuvan tietokantaasi, lähetät sen nimen funktioon joka tarkastelee sisältääkö merkkijono yhtään heittomerkkiä ja jos sisältää niin laittaa siihen eteen kenoviivan, jolloin se heittomerkki ohitetaan. Sitten se funktio palauttaa uuden merkkijonon (caveman\'s valentine), mikä lisätään sinne tietokantaan.
Kiitoksia. Escape tosiaan on avainsana MySQLdb vanhempien versioiden kohdalla. Uudemmille versioille löyty hyvin simppeli ratkaisu:
http://forums.devshed.com/python-programming-11/storing-blob-in-mysql-db-116913.html
Aihe on jo aika vanha, joten et voi enää vastata siihen.