ทำไมบางคนใส่ `ที่ 1 = 1` ในแบบสอบถาม


18

where 1 = 1ฉันมาข้ามมุมมองในฐานข้อมูลของเราวันนี้ที่คำสั่งแรกในข้อที่เป็น สิ่งนี้ไม่ควรกลับมาเป็นจริงสำหรับทุกระเบียนหรือไม่ ทำไมบางคนจะเขียนสิ่งนี้หากไม่ได้กรองระเบียนใด ๆ


ตอบแล้วที่นี่: dba.stackexchange.com/questions/667/…
Gaius

3
เพราะพวกเขาต้องการแฮ็กเว็บไซต์ sombodys ;-)
Tim Schmelter

คำตอบ:


40

บางคนสร้างแบบสอบถามแบบไดนามิกรวมถึงเงื่อนไขนี้เพื่อให้เงื่อนไขใด ๆ "ของจริง" ที่สามารถเพิ่มได้ด้วยการไม่ต้องทำเช่นการตรวจสอบANDif (first condition) 'WHERE' else 'AND'


ฟังดูแปลกที่ผู้สร้างแบบสอบถามไม่สามารถกำหนดเงื่อนไขได้ว่าเป็นเงื่อนไขแรกในบรรทัด แต่ฉันคิดว่าคุณก็ถูกต้องเช่นกัน
ern0

3
มันมักจะเป็นกรณีที่ "ตัวสร้างแบบสอบถาม" เป็นคนเขียนรหัสเพื่อเชื่อมต่อกับคำสั่ง SQL ด้วยมือ บางครั้งการแนะนำการสร้างห้องสมุดแบบสอบถามที่เป็นทางการมากขึ้นจะกำจัดมัน
araqnid

1
ฉันต้องจัดการกับรหัส "เก่า" เช่นนี้และมันเป็นเรื่องจริง เมื่อคุณกำลังรวบรวมคำสั่ง SQL ทั้งหมดลงในสตริงเดียวจะมีคำสั่ง if / then หรือ case ที่อาจเรียกหรือไม่ทำงาน เนื่องจากคุณไม่เคยรู้ว่ามีการใช้พา ธ ของรหัสใด ๆ หรือไม่ แต่คุณมี AND ที่ฝังอยู่ใน WHERE clause ของคุณ (เนื่องจาก clause ที่เป็นส่วนหนึ่งของสตริงอย่างสม่ำเสมอ) คุณจะต้อง (a) ลบ off and AND หรือ ( b) เพียงแค่ผ่านมันเป็นเหตุผลของความจริงเหตุผลที่แท้จริง การเพิ่ม "1 = 1" นั้นง่ายกว่าการใส่สตริงใหม่อย่างถูกต้อง
Avery Payne

5

หากคุณมีจุดสร้างคำสั่ง SQL จำนวนมากในโปรแกรมของคุณซึ่งสร้างเคียวรีที่คล้ายกันคุณสามารถทำเครื่องหมายการตรวจสอบด้วยเทคนิคนี้ หากประโยคเกี่ยวกับการนับคุณอาจใช้รหัสด้านล่างเพื่อให้คุณสามารถ grep 42จากบันทึก SQL

select count(42) from table

4

มันให้สถานการณ์ที่เป็นจริงเสมอดังนั้นจึงไม่ส่งผลกระทบต่อผลลัพธ์ แต่คุณรู้ว่ามีหนึ่งรายการในส่วนคำสั่ง WHERE อยู่แล้ว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.