[討論] SQLite query

看板AndroidDev作者 (NotLove)時間10年前 (2015/09/18 12:26), 10年前編輯推噓0(0011)
留言11則, 4人參與, 最新討論串1/1
想請問各位大大 最近重新翻了一遍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

09/18 12:58, , 1F
因為這樣就要用加號把值連進selection字串,如果很多
09/18 12:58, 1F

09/18 12:58, , 2F
值的話很難看,不方便閱讀
09/18 12:58, 2F

09/18 14:58, , 3F
防止sql injection
09/18 14:58, 3F

09/18 15:08, , 4F
放在args應該有做escape,能防範injection吧
09/18 15:08, 4F

09/18 15:24, , 5F
sql指令和args是分別送到資料庫的,sql指令會由資料庫解析
09/18 15:24, 5F

09/18 15:24, , 6F
後執行,args是執行時才代入
09/18 15:24, 6F

09/18 15:25, , 7F
直接把data組到sql指令裡,就會原本應該只是data的值也被當
09/18 15:25, 7F

09/18 15:25, , 8F
指令執行,就是造成injection的原因
09/18 15:25, 8F
所以 db.rawQuery(...) 本身比較危險的意思嗎? ※ 編輯: issuemylove (59.113.208.129), 09/18/2015 17:23:20

09/19 00:14, , 9F
rawQuery一樣有binding args的版本吧,只是沒幫你串column
09/19 00:14, 9F

09/19 00:14, , 10F
where那些而已
09/19 00:14, 10F

09/19 02:13, , 11F
rawQuery如果有輸入介面的話比較危險
09/19 02:13, 11F
文章代碼(AID): #1L-vAFZ0 (AndroidDev)