صياغة استعلامات SQL بشكل فعال في Go
قد يكون ربط السلاسل مع القيم في استعلامات SQL النصية أمرًا صعبًا بعض الشيء في Go. على عكس Python، يتصرف بناء جملة تنسيق السلسلة في Go بشكل مختلف، مما يؤدي إلى أخطاء شائعة مثل تلك التي نواجهها هنا.
خطأ في بناء جملة Tuple
يحاول مقتطف التعليمات البرمجية الأولي استخدام Python -نمط Tuple، وهو غير مدعوم في Go. يؤدي هذا إلى خطأ في بناء الجملة:
query := fmt.Sprintf(`SELECT column_name FROM table_name
WHERE column1_name = %d AND column2_name = %d`,
(val1, val2))
أنواع غير متطابقة
محاولة تحويل عناصر الصف كسلاسل تفشل أيضًا بسبب عدم تطابق النوع:
query := fmt.Sprintf(`SELECT column_name FROM table_name
WHERE column1_name = %d AND column2_name = %d`,
val1, val2)
تجنب عدم تطابق عامل التشغيل
سيعمل إرسال المعلمات كسلاسل وتسلسلها مع عامل التشغيل %s ولكن لا يوصى به. يقدم هذا الأسلوب خطر عدم تطابق عامل التشغيل:
query := fmt.Sprintf(`SELECT column_name FROM table_name
WHERE column1_name = %s AND column2_name = %s`,
strconv.Itoa(val1), val2)
حل Go
لكتابة استعلام SQL نصي بشكل صحيح مع تسلسل القيمة في Go، استخدم fmt.Sprintf كما يلي:
query := fmt.Sprintf(`SELECT column_name FROM table_name
WHERE column1_name = %d AND column2_name = %s`,
val1, val2)
يتجنب بناء الجملة هذا ثغرات الحقن ويضمن تحويل النوع المناسب.منع الحقن
لمنع هجمات حقن SQL، استخدم دائمًا الاستعداد البيانات أو توفير أحرف الهروب للمدخلات المقدمة من قبل المستخدم.تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3