Ini membingungkan hampir semua orang yang bekerja dengan MySQLDB. Anda meneruskan argumen ke fungsi eksekusi, tidak melakukan substitusi string python. %s dalam string kueri digunakan lebih seperti pernyataan yang disiapkan daripada substitusi string python. Ini juga mencegah injeksi SQL karena MySQLDB akan melakukan pelolosan untuk Anda. Seperti yang Anda lakukan sebelumnya (menggunakan % dan substitusi string), Anda rentan terhadap injeksi.
- Jangan gunakan tanda kutip. MySQLDB akan menempatkannya di sana (jika diperlukan).
-
Gunakan a , alih-alih %. Sekali lagi, Anda meneruskan tuple sebagai argumen ke fungsi eksekusi.
self.dbc.execute("pilih * dari mobil dimana reg=%s" , (reg,))