Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Menggunakan Penyata WHERE IN dengan betul dalam SQLite untuk Mengelakkan Ralat dan Suntikan SQL?
Memahami "WHERE _ IN _" Pernyataan
Apabila menggunakan WHERE IN pernyataan dalam SQLite, adalah penting untuk memahami sintaks dan penggunaan yang betul untuk mengelakkan perkara biasa ralat.
Isu Sintaks
Kod contoh yang diberikan menghasilkan "Ralat Pengaturcaraan" kerana bilangan pengikatan (parameter) yang disediakan tidak sepadan dengan bilangan ruang letak ( ?) dalam kenyataan tersebut. SQLite menjangkakan parameter ikatan (? atau parameter kedudukan) untuk setiap item dalam senarai IN.
Penyelesaian
Untuk membetulkan isu ini, cipta parameter ikatan yang mencukupi untuk dipadankan senarai pembolehubah. Ini boleh dicapai menggunakan interpolasi rentetan:
statement = "SELECT * FROM tab WHERE obj IN ({0})".format(', '.join(['?'] * len(list_of_vars))) c.execute(statement, list_of_vars)
Mengelakkan SQL Injection
Bertentangan dengan coretan kod asal, kaedah ini selamat terhadap serangan suntikan SQL kerana pembolehubah terikat dengan betul pada pernyataan SQL.
Prestasi Pertimbangan
Untuk senarai besar pembolehubah, menggunakan jadual sementara mungkin lebih cekap. Cipta jadual sementara untuk menyimpan nilai, kemudian gunakan JOIN terhadap jadual sementara dan bukannya klausa IN dengan parameter ikatan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Penyata WHERE IN dengan betul dalam SQLite untuk Mengelakkan Ralat dan Suntikan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!