"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > عند استخدام SQLite3 في Python، لماذا \"تم توفير عدد غير صحيح من الروابط\" عند استخدام \"?\" استبدال المعلمة؟

عند استخدام SQLite3 في Python، لماذا \"تم توفير عدد غير صحيح من الروابط\" عند استخدام \"?\" استبدال المعلمة؟

تم النشر بتاريخ 2024-11-07
تصفح:873

When Using SQLite3 in Python, Why \

لغز استبدال معلمة SQLite

في محاولة للحماية ضد حقن 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.

بيان الافراج أعيد طبع هذه المقالة على: 1729322955 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3