Pernyataan SQL yang menggunakan kad bebas dan kata kunci LIKE boleh menghadapi cabaran apabila menggunakan keupayaan pemformatan rentetan Python. Berikut ialah beberapa perangkap biasa dan kemungkinan penyelesaiannya:
Menggunakan secara langsung % pemformatan rentetan dengan kad bebas boleh membawa kepada ralat. Pemformatan rentetan Python tidak mengenali aksara khas yang digunakan untuk kad bebas, mengakibatkan ralat "aksara format tidak disokong ''' (0x27) pada indeks 128."
Semasa rentetan penggabungan mungkin muncul untuk menyelesaikan isu pemformatan, ia sebenarnya mencipta ralat sintaks apabila digunakan dengan MySQLdb kerana baris 158 dalam fail "cursors.py". Ralat "query = query % db.literal(args)" menunjukkan ketidakpadanan dalam bilangan argumen yang disediakan.
Menggunakan '%%' jujukan melarikan diri juga boleh mengakibatkan ralat yang sama seperti percubaan 3.
Untuk mengurangkan kebimbangan keselamatan daripada serangan suntikan SQL, adalah dinasihatkan untuk menggunakan kaedah execute() dengan parameter pertanyaan. Pendekatan ini memastikan pengendalian aksara kad bebas yang betul dan menghalang input berniat jahat.
Sebagai contoh, kod berikut menunjukkan pelaksanaan yang selamat:
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 + '%',))
Dalam contoh ini, dua argumen dihantar kepada laksana () kaedah. Argumen pertama mengandungi pertanyaan berparameter, manakala argumen kedua menyediakan nilai berformat kad bebas sebagai tupel. Pendekatan ini memastikan pelaksanaan pernyataan SQL yang selamat dan cekap dengan kad bebas.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Pemformatan Rentetan Python dengan Selamat dengan Kad Liar SQL dan Pernyataan LIKE?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!