ThinkPHP开发指南-模型之类型检测
来自站长百科
导航:上一页
新版的ThinkPHP具有字段类型检测,对于不合法的字段数据会进行强制转换。字段类型检测可以用于数据写入和数据查询操作。需要启用字段类型检测的话,需要在配置文件中开启DB_FIELDTYPE_CHECK参数:
PHP代码
'DB_FIELDTYPE_CHECK'=>true, // 开启字段类型验证
如果在非调试模式下面开启字段类型检测后,请清空字段缓存目录(位于Runtime/Data/_fields/),重新生成字段缓存的时候,会在缓存文件中记录字段的类型信息。这是后面进行字段类型检测的前提。
字段类型检测主要在两个阶段会自动处理:
- 在数据写入到数据库之前
例如:PHP代码
$User = M("User"); // 实例化User对象 // 然后直接给数据对象赋值 $User->name = 'ThinkPHP'; $User->score = '2ThinkPHP'; // 把数据对象添加到数据库 $User->add();
由于用户表的score设计的是数字类型,所以实际写入数据库之前,score属性的值已经被强制进行intval转换了,模型的save方法也会同样进行字段类型检查。虽然在很多情况下,数据库本身也会进行数据转换,但是对于某些数据库要求严格检查数据类型的情况会有帮助。
- 在使用数组方式的普通查询条件后
例如:PHP代码
$User = M("User"); // 实例化User对象 $condition['id'] = '1 OR 1=1'; // 把查询条件传入查询方法 $User->where($condition)->select();
对于这样的一个查询条件,在进行数据库查询之前,会对查询的数组条件进行字段类型检查,直接就把id的值强制转换为1然后再进行查询操作。即使不进行强制转换,系统也会进行安全过滤,把这样的非法数据进行转义,区别在于这样对于数据库更加安全,对于某些数据库要求严格检查数据类型的情况会有帮助。