Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Menggunakan Pemformatan Rentetan Python dengan Selamat dengan Kad Liar SQL dan Pernyataan LIKE?

Bagaimanakah Saya Boleh Menggunakan Pemformatan Rentetan Python dengan Selamat dengan Kad Liar SQL dan Pernyataan LIKE?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-26 17:43:10783semak imbas

How Can I Safely Use Python String Formatting with SQL Wildcards and LIKE Statements?

Menggunakan Format Rentetan Python dengan Kad Liar SQL dan LIKE

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:

Percubaan 1 dan Percubaan 2: % Format Rentetan dengan Kad Liar

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."

Percubaan 3: Menggabungkan Rentetan

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.

Percubaan 4: Menggunakan % Escape Sequence

Menggunakan '%%' jujukan melarikan diri juga boleh mengakibatkan ralat yang sama seperti percubaan 3.

Penyelesaian Selamat dengan Execute() dan Parameter Pertanyaan

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn