Menyelesaikan Masalah Ralat Pertanyaan SQL Berparameter: Menyelesaikan "tidak semua argumen ditukar semasa pemformatan rentetan"
Apabila cuba melaksanakan pertanyaan SQL berparameter, pembangun boleh menghadapi ralat: "TypeError: tidak semua argumen ditukar semasa pemformatan rentetan." Isu ini biasanya timbul apabila menggunakan pemformatan rentetan untuk pertanyaan dengan parameter yang tidak mencukupi atau tidak diformat dengan betul.
Untuk menyelesaikan ralat ini, adalah penting untuk memastikan bahawa setiap pemegang tempat dalam rentetan yang diformatkan dipadankan dengan hujah yang sepadan dalam pertanyaan . Dalam coretan kod yang diberikan:
cur.execute("SELECT * FROM records WHERE email LIKE '%s'", search)
Pemegang tempat '%s' dalam pertanyaan mewakili parameter yang akan digantikan dengan nilai dalam carian. Walau bagaimanapun, kaedah pelaksanaan menjangkakan senarai atau tuple yang mengandungi parameter. Untuk membetulkannya, pengubahsuaian berikut boleh dibuat:
cur.execute("SELECT * FROM records WHERE email LIKE %s", [search])
Dengan membungkus carian dalam senarai, ia menjadi boleh lelar yang boleh dibongkar ke dalam parameter individu. Sintaks yang betul untuk melaksanakan pertanyaan berparameter dalam MySQLdb memerlukan parameter dihantar sebagai senarai.
Pelarasan mudah ini memastikan semua argumen ditukar dengan betul semasa pemformatan rentetan dan menghapuskan ralat yang disebutkan di atas. Sebagai alternatif, tuple (senarai tidak berubah) boleh digunakan dan bukannya senarai untuk menghantar parameter.
Atas ialah kandungan terperinci Mengapa Pertanyaan SQL Parameter Saya Melemparkan Ralat 'tidak semua argumen ditukar semasa pemformatan rentetan'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!