Чому хтось поставить запит `де 1 = 1`?


18

Сьогодні я натрапив на перегляд у нашій базі даних, де було перше твердження в пункті де where 1 = 1. Чи не повинно це повернутись для кожного запису? Чому хтось пише це, якщо він не фільтрує жодних записів?



3
Тому що вони хочуть зламати веб-сайт сомбоди ;-)
Тім

Відповіді:


40

Деякі розробники динамічних запитів включають цю умову, так що будь-які "реальні" умови можна додавати за допомогою ANDбез перевірки, як if (first condition) 'WHERE' else 'AND'.


Дивно звучить, що конструктор запитів не може визначити, чи є стан першим у рядку, але я також думаю, ви маєте рацію.
ern0

3
часто трапляється, коли "конструктор запитів" - це хтось, хто пише код, щоб об'єднатися в оператор SQL вручну. іноді введення більш формальної бібліотеки побудови запитів усуває її.
araqnid

1
Мені довелося мати справу зі "старим" кодом, як це, і це дуже правда. Коли ви збираєте весь оператор SQL в одну рядок, з'являться пучки операторів if / then або case, які можуть або не можуть спрацьовувати. Оскільки ви ніколи не знаєте, чи прийнято будь-який з цих кодових шляхів, АЛЕ у вас є І вбудований у ваш пункт WHERE (через застереження, яке послідовно є частиною рядка), вам потрібно (а) видалити порушуюче AND або ( б) просто передати це логічним істинним. Додавати "1 = 1" простіше, ніж правильно редагувати рядок.
Avery Payne

5

Якщо у вашій програмі є багато точок побудови операторів SQL, які генерують подібні запити, ви можете відзначити досліджуваний за допомогою цього фокусу. Якщо речення стосується підрахунку, ви можете використовувати код нижче, щоб ви могли вийти 42з журналу SQL.

select count(42) from table

4

Це забезпечує ситуацію, яка завжди відповідає дійсності, тому вона не впливає на результати, але ви знаєте, що в пункті WHERE вже є один пункт.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.