Sebenarnya, saya pernah melihat hal semacam ini digunakan dalam laporan BIRT. Kueri yang diteruskan ke runtime BIRT adalah dalam bentuk:
select a,b,c from t where a = ?
dan '?' diganti pada saat runtime oleh nilai parameter aktual yang dipilih dari kotak drop-down. Pilihan dalam drop-down diberikan oleh:
select distinct a from t
union all
select '*' from sysibm.sysdummy1
sehingga Anda mendapatkan semua nilai yang mungkin plus " *
". Jika pengguna memilih " *
" dari kotak drop down (artinya semua nilai a harus dipilih), kueri harus dimodifikasi (dengan Javascript) sebelum dijalankan.
Sejak "?" adalah parameter posisi dan HARUS tetap ada untuk hal lain berfungsi, Javascript memodifikasi kueri menjadi:
select a,b,c from t where ((a = ?) or (1==1))
Itu pada dasarnya menghilangkan efek klausa di mana sementara masih meninggalkan parameter posisi di tempatnya.
Saya juga melihat kasus AND yang digunakan oleh lazy coders sementara secara dinamis membuat query SQL.
Katakanlah Anda harus secara dinamis membuat kueri yang dimulai dengan select * from t
dan memeriksa:
- namanya adalah Bob; dan
- gajinya> $ 20.000
beberapa orang akan menambahkan yang pertama dengan WHERE dan yang berikutnya dengan DAN dengan demikian:
select * from t where name = 'Bob' and salary > 20000
Pemrogram malas (dan itu tidak selalu sifat buruk ) tidak akan membedakan antara kondisi yang ditambahkan, mereka akan mulai dengan select * from t where 1=1
dan hanya menambahkan klausa DAN setelah itu.
select * from t where 1=1 and name = 'Bob' and salary > 20000