Dette forvirrer næsten alle, der arbejder med MySQLDB. Du sender argumenter til execute-funktionen og laver ikke python-strengsubstitution. %s i forespørgselsstrengen bruges mere som en forberedt sætning end en pythonstrengsubstitution. Dette forhindrer også SQL-injektion, da MySQLDB vil gøre det for dig. Som du havde det før (ved at bruge % og strengsubstitution), er du sårbar over for injektion.
- Brug ikke anførselstegn. MySQLDB vil placere dem der (hvis nødvendigt).
-
Brug en i stedet for en %. Igen sender du en tuple som et argument til execute-funktionen.
self.dbc.execute("vælg * fra bil hvor reg=%s" , (reg,))