Tại sao ai đó sẽ đặt `where 1 = 1` trong một truy vấn?


18

Tôi đã bắt gặp một khung nhìn trong cơ sở dữ liệu của chúng tôi ngày hôm nay nơi phát biểu đầu tiên trong mệnh đề where where 1 = 1. Điều này có nên trở lại đúng với mọi bản ghi không? Tại sao ai đó sẽ viết điều này nếu nó không lọc bất kỳ hồ sơ?


Đã trả lời tại đây: dba.stackexchange.com/questions/667/ trộm
Gaius

3
Bởi vì họ muốn hack trang web sombodys ;-)
Tim Schmelter

Câu trả lời:


40

Một số trình tạo truy vấn động bao gồm điều kiện này để có thể thêm bất kỳ điều kiện "thực" nào ANDmà không cần thực hiện kiểm tra như thế nào if (first condition) 'WHERE' else 'AND'.


Nghe có vẻ lạ khi một người xây dựng truy vấn không thể xác định được điều kiện nào là điều kiện đầu tiên trong một dòng, nhưng tôi cũng nghĩ rằng, bạn đã đúng.
vào

3
thường là khi "trình xây dựng truy vấn" là người viết mã để ghép vào câu lệnh SQL bằng tay. đôi khi giới thiệu một thư viện xây dựng truy vấn chính thức hơn loại bỏ nó.
araqnid

1
Tôi đã phải đối phó với mã "cũ" như thế này, và nó rất đúng. Khi bạn tập hợp toàn bộ câu lệnh SQL thành một chuỗi, sẽ có một loạt các câu lệnh if / then hoặc case có thể kích hoạt hoặc không kích hoạt. Vì bạn không bao giờ biết liệu có bất kỳ đường dẫn mã nào được thực hiện hay không, NHƯNG bạn có AND được nhúng trong mệnh đề WHERE của bạn (do mệnh đề luôn là một phần của chuỗi), bạn cần phải (a) loại bỏ vi phạm AND hoặc ( b) chỉ đơn giản là vượt qua nó một sự thật. Thêm "1 = 1" dễ dàng hơn việc sắp xếp lại chuỗi chính xác.
Avery Payne

5

Nếu bạn có nhiều điểm xây dựng câu lệnh SQL trong chương trình tạo ra các truy vấn tương tự , bạn có thể đánh dấu điểm được kiểm tra bằng thủ thuật này. Nếu câu nói về việc đếm, bạn có thể sử dụng mã bên dưới để bạn có thể rút ra 42từ nhật ký SQL.

select count(42) from table

4

Nó cung cấp một tình huống luôn luôn đúng, vì vậy nó không ảnh hưởng đến kết quả, nhưng bạn biết rằng đã có một mục trong mệnh đề WHERE.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.