لماذا يحتوي استعلام SQL على "حيث 1 = 1" [مكرر]

StackOverflow https://stackoverflow.com/questions/517107

  •  21-08-2019
  •  | 
  •  

سؤال

كنت أقوم ببعض الاستفسارات التي أحتفظ بها، وقد قام أحد المبرمجين بإدخال الاستعلامات "حيث 1=1" بالنسبة لي والتي يبدو دائمًا أنها يتم تقييمها على أنها صحيحة.

هل هناك فوائد لهذا؟

ينسخ: لماذا يستخدم شخص ما WHERE 1=1 AND في جملة SQL؟

هذا السؤال ليس إجابة على هذا السؤال.

حيث الشرطية:

select * from table where 1=1 and sStatus not in ('status1','status2','status3')

لا توجد برمجة أو إذا كانت البيانات لدفع وهناك.استعلام مستقيم.

إذا كان بإمكانك إلغاء إغلاق هذا، أود أن أعرف ما إذا كان هناك غرض حتى أتمكن من إعادة كتابة وإزالة 1=1 إذا لم يكن ذلك ضروريًا.

هل كانت مفيدة؟

المحلول

هل كانت استعلامات ديناميكية؟يكون ذلك مفيدًا في بعض الأحيان عند إنشاء استعلامات ديناميكية استنادًا إلى معلمات اختيارية.

نصائح أخرى

إذا كنت تقوم بإنشاء جملة حيث ديناميكيًا، فقد تكون كسولًا بعض الشيء وتفترض أن كل جملة تضيفها يمكن أن تكون مسبوقة بـ "AND"، على سبيل المثال.

$str="select foo from bar where 1=1";

if ($filter1)
{
    $str.=" and col1='frobozz'";
}

إذا كنت تريد إضافة قيود إلى استعلامك تلقائيًا، فهذا يجعل حياتك أسهل:

string sql = "SELECT * FROM table WHERE 1=1";

if (someflag) {
  sql += " AND valid = 1";
}

if (someotherflag) {
  sql += " AND special = 1";
}

execute(sql);

بدون WHERE 1 = 1 سيتعين عليك في كل حالة التحقق مما إذا كان هذا هو القيد الأول الذي تضيفه (ثم استخدمه WHERE ...) أو إذا قمت بالفعل بإضافة بعض القيود الأخرى من قبل (ثم قم بإضافة AND ...).

أستخدم هذا للعبارات الديناميكية عندما أقوم ببعض البرمجة البطيئة ولا أرغب دائمًا في التحقق مما إذا كانت الجملة فارغة لتحديد ما إذا كنت بحاجة الآن إلى "و" بين عباراتي الديناميكية.

هذا حقًا منطقي فقط في الاستعلامات الديناميكية.إذا كنت تقوم بإضافة معلمات في حلقة بدلاً من الاضطرار إلى التحقق مما إذا كان هناك مكان بالفعل، فيمكنك فقط إلحاق AND Column = Value في كل مرة.

لقد رأيت سببين لذلك، عندما تريد دائمًا نتيجة حقيقية، أو عندما يكون هناك رقم عشوائي من "and condition = value" ملحق بالعبارة

هذا شيء مشوق...جملة WHERE لا تحتوي إلا على 1=1؟لقد رأيت هذا بشكل متكرر في محاولات حقن SQL التي تم فيها تعيين جملة WHERE على xyz="something" OR 1=1; كوسيلة لإرجاع قائمة النتائج دائمًا.

هل يمكنك إخبارنا بالمزيد حول ما يحدث مع هذا الاستعلام حتى نتمكن من الإجابة على السؤال بشكل أفضل؟

  • نيكولاس
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top