Menggunakan Kad Liar SQL dan Operator LIKE dalam Format Rentetan Python
Memasukkan kad bebas SQL dan operator LIKE ke dalam format rentetan Python boleh menjadi mencabar. Artikel ini menawarkan penyelesaian kepada ralat biasa yang dihadapi semasa cuba melaksanakan pertanyaan MySQL menggunakan MySQLdb.
Ralat daripada MySQLdb
Percubaan 3 dan 4 mengembalikan ralat daripada MySQLdb, yang menunjukkan " tidak cukup argumen untuk format rentetan." Ini berlaku kerana tanda % ditafsirkan sebagai penentu format oleh operator pemformatan rentetan dalam Python.
Kerentanan kepada SQL Injection
Empat percubaan pertama yang ditunjukkan terdedah kepada Serangan suntikan SQL. Input pengguna, seperti pembolehubah pertanyaan, harus dibersihkan atau dilupuskan untuk mengelakkan SQL berniat jahat daripada dilaksanakan.
Pendekatan Betul
Pendekatan yang disyorkan ialah menggunakan ruang letak bukannya pemformatan rentetan. Berikut ialah contoh:
curs.execute("""SELECT tag.userId, count(user.id) as totalRows FROM user INNER JOIN tag ON user.id = tag.userId WHERE user.username LIKE %s""", ('%' + query + '%',))
Dua argumen diluluskan untuk melaksanakan():
Pendekatan ini memastikan bahawa Kenyataan SQL adalah sah dan dilindungi daripada suntikan SQL.
Atas ialah kandungan terperinci Bagaimana untuk Menggunakan Kad Liar SQL dengan Selamat dengan `MySQLdb` Python untuk Mengelakkan Suntikan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!