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