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然后再进行查询操作。即使不进行强制转换,系统也会进行安全过滤,把这样的非法数据进行转义,区别在于这样对于数据库更加安全,对于某些数据库要求严格检查数据类型的情况会有帮助。