في محاولة للحماية ضد حقن SQL، واجه أحد المطورين خطأ أثناء استخدام SQLite3 مع Python 2.5. عند استخدام الموصى بها "؟" استبدال المعلمة لمنع الحقن، واجهوا المعضلة التالية:
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 8 supplied.
يبدو أن هذه المشكلة تنبع من الإنشاء الأولي لقاعدة البيانات، والذي يحتوي على ثمانية روابط. ومع ذلك، فإن استخدام بديل "%s" الأقل أمانًا لكل اسم عنصر قد أدى إلى حل المشكلة.
for item in self.inventory_names: self.cursor.execute("SELECT weight FROM Equipment WHERE name = '%s'" % item) self.cursor.close()
يكمن حل هذه الحيرة في فهم أن طريقة Cursor.execute() تتطلب تسلسلًا كمعلمة ثانية. في هذه الحالة، كان المطور يقدم سلسلة تصادف أنها مكونة من ثمانية أحرف. لتصحيح ذلك، يجب تنفيذ تعديل التعليمات البرمجية التالي:
self.cursor.execute("SELECT weight FROM Equipment WHERE name = ?", [item])
من خلال التوافق مع هذه المعلمة وفقًا للمواصفات، يمكن معالجة المشكلة بشكل فعال، مما يسمح باسترجاع البيانات بشكل آمن وفعال من SQLite3.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3