作者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/cn.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