WIKI使用導(dǎo)航
站長(zhǎng)百科導(dǎo)航
站長(zhǎng)專題
- 網(wǎng)站推廣
- 網(wǎng)站程序
- 網(wǎng)站賺錢
- 虛擬主機(jī)
- cPanel
- 網(wǎng)址導(dǎo)航專題
- 云計(jì)算
- 微博營銷
- 虛擬主機(jī)管理系統(tǒng)
- 開放平臺(tái)
- WIKI程序與應(yīng)用
- 美國十大主機(jī)
ThinkPHP開發(fā)指南-模型之類型檢測(cè)
導(dǎo)航:上一頁
新版的ThinkPHP具有字段類型檢測(cè),對(duì)于不合法的字段數(shù)據(jù)會(huì)進(jìn)行強(qiáng)制轉(zhuǎn)換。字段類型檢測(cè)可以用于數(shù)據(jù)寫入和數(shù)據(jù)查詢操作。需要啟用字段類型檢測(cè)的話,需要在配置文件中開啟DB_FIELDTYPE_CHECK參數(shù):
PHP代碼
'DB_FIELDTYPE_CHECK'=>true, // 開啟字段類型驗(yàn)證
如果在非調(diào)試模式下面開啟字段類型檢測(cè)后,請(qǐng)清空字段緩存目錄(位于Runtime/Data/_fields/),重新生成字段緩存的時(shí)候,會(huì)在緩存文件中記錄字段的類型信息。這是后面進(jìn)行字段類型檢測(cè)的前提。
字段類型檢測(cè)主要在兩個(gè)階段會(huì)自動(dòng)處理:
- 在數(shù)據(jù)寫入到數(shù)據(jù)庫之前
例如:PHP代碼
$User = M("User"); // 實(shí)例化User對(duì)象 // 然后直接給數(shù)據(jù)對(duì)象賦值 $User->name = 'ThinkPHP'; $User->score = '2ThinkPHP'; // 把數(shù)據(jù)對(duì)象添加到數(shù)據(jù)庫 $User->add();
由于用戶表的score設(shè)計(jì)的是數(shù)字類型,所以實(shí)際寫入數(shù)據(jù)庫之前,score屬性的值已經(jīng)被強(qiáng)制進(jìn)行intval轉(zhuǎn)換了,模型的save方法也會(huì)同樣進(jìn)行字段類型檢查。雖然在很多情況下,數(shù)據(jù)庫本身也會(huì)進(jìn)行數(shù)據(jù)轉(zhuǎn)換,但是對(duì)于某些數(shù)據(jù)庫要求嚴(yán)格檢查數(shù)據(jù)類型的情況會(huì)有幫助。
- 在使用數(shù)組方式的普通查詢條件后
例如:PHP代碼
$User = M("User"); // 實(shí)例化User對(duì)象 $condition['id'] = '1 OR 1=1'; // 把查詢條件傳入查詢方法 $User->where($condition)->select();
對(duì)于這樣的一個(gè)查詢條件,在進(jìn)行數(shù)據(jù)庫查詢之前,會(huì)對(duì)查詢的數(shù)組條件進(jìn)行字段類型檢查,直接就把id的值強(qiáng)制轉(zhuǎn)換為1然后再進(jìn)行查詢操作。即使不進(jìn)行強(qiáng)制轉(zhuǎn)換,系統(tǒng)也會(huì)進(jìn)行安全過濾,把這樣的非法數(shù)據(jù)進(jìn)行轉(zhuǎn)義,區(qū)別在于這樣對(duì)于數(shù)據(jù)庫更加安全,對(duì)于某些數(shù)據(jù)庫要求嚴(yán)格檢查數(shù)據(jù)類型的情況會(huì)有幫助。