作者issuemylove (NotLove)
看板AndroidDev
標題[討論] SQLite query
時間Fri Sep 18 12:26:52 2015
想請問各位大大
最近重新翻了一遍sqlite
覺得一件奇怪的事情
SQLiteDatabase db = ...;
db.query(...,
selection,
selectionArgs,...);
通常selection 裡含 "?" 然後在 args 填入值
但事實上
db.query(...,
selectionAndArgs,
null, ...);
也是可以的
那為什麼要將原本sql與法中where的描述分成 selection和selectionArgs呢?
謝謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.113.208.129
※ 文章網址: https://webptt.com/m.aspx?n=bbs/AndroidDev/M.1442550415.A.8C0.html
1F:→ mshockwave: 因為這樣就要用加號把值連進selection字串,如果很多 09/18 12:58
2F:→ mshockwave: 值的話很難看,不方便閱讀 09/18 12:58
3F:→ ssccg: 防止sql injection 09/18 14:58
4F:→ LZN: 放在args應該有做escape,能防範injection吧 09/18 15:08
5F:→ ssccg: sql指令和args是分別送到資料庫的,sql指令會由資料庫解析 09/18 15:24
6F:→ ssccg: 後執行,args是執行時才代入 09/18 15:24
7F:→ ssccg: 直接把data組到sql指令裡,就會原本應該只是data的值也被當 09/18 15:25
8F:→ ssccg: 指令執行,就是造成injection的原因 09/18 15:25
所以 db.rawQuery(...) 本身比較危險的意思嗎?
※ 編輯: issuemylove (59.113.208.129), 09/18/2015 17:23:20
9F:→ ssccg: rawQuery一樣有binding args的版本吧,只是沒幫你串column 09/19 00:14
10F:→ ssccg: where那些而已 09/19 00:14
11F:→ qweqweqweqwe: rawQuery如果有輸入介面的話比較危險 09/19 02:13