تقييم الدرس 23: SQL الديناميكي الآمن: EXECUTE و format. إجاباتك تُحفظ تلقائيًّا على هذا الجهاز؛ أجب ثم اضغط «صحّح ورقتي».
1السؤال الأول: اختر الإجابة الصحيحة
1) متى نحتاج SQL الديناميكي؟
2) ما المشكلة في هذا السطر؟
query.sql
EXECUTE'DELETE FROM orders WHERE status = ''' || s || '''';
3) format('%L', 'O''Brien') يُنتج:
4) في MySQL يُنفّذ الأمر الديناميكي بـ:
5) أسلم طريقة لاسم عمود الترتيب من المستخدم:
2السؤال الثاني: صح أم خطأ
1) USING يمرر القيم منفصلة عن نص الأمر.
الصواب: صح
2) %s آمن لأسماء الجداول.
الصواب: خطأ
3) يمكن حفظ نتيجة EXECUTE في متغير بـ INTO.
الصواب: صح
4) USING يستطيع تمرير اسم جدول.
الصواب: خطأ
5) الحقن قد يسمح بحذف بيانات أو تسريبها.
الصواب: صح
3السؤال الثالث: أكمل الفراغات من القائمة المنسدلة
1) لوضع اسم جدول بأمان: format('SELECT * FROM ', t)
الإجابة: %I
2) لتمرير قيمة إلى $1 في EXECUTE نكتب v
الإجابة: USING
3) لوضع قيمة نصية مهرَّبة في format نستخدم .
الإجابة: %L
4السؤال الرابع: أسئلة عملية
1) ما ناتج هذا الاستعلام؟
query.sql
SELECTformat('SELECT %I FROM %I WHERE city = %L', 'name', 'customers', 'جدة');
الناتج الصحيح:
النتيجة · صف واحد
format
SELECT name FROM customers WHERE city = 'جدة'
2) ما ناتج هذا الكود؟
query.sql
CREATEFUNCTION find_unsafe(who text) RETURNSbigintLANGUAGEplpgsqlAS $$DECLARE n bigint;BEGINEXECUTE'SELECT count(*) FROM customers WHERE name = ''' || who || ''''INTO n;RETURN n;END;$$;SELECT find_unsafe($q$x' OR city = 'جدة$q$);