ThinkPHP3.0完全开发手册                                           

 

14.2               字段类型验证

新版的ThinkPHP具有字段类型检测,对于不合法的字段数据会进行强制转换。字段类型检测可以用于数据写入和数据查询操作。

需要启用字段类型检测的话,需要在配置文件中开启DB_FIELDTYPE_CHECK参数:

'DB_FIELDTYPE_CHECK'=>true,  // 开启字段类型验证

如果在非调试模式下面开启字段类型检测后,请清空字段缓存目录(位于Runtime/Data/_fields/),重新生成字段缓存的时候,会在缓存文件中记录字段的类型信息。这是后面进行字段类型检测的前提。

字段类型检测主要在两个阶段会自动处理:

一、在数据写入到数据库之前

例如:

$User M("User"); // 实例化User对象

// 然后直接给数据对象赋值

$User->name 'ThinkPHP';

$User->score '2ThinkPHP';

// 把数据对象添加到数据库

$User->add();

由于用户表的score设计的是数字类型,所以实际写入数据库之前,score属性的值已经被强制进行intval转换了,模型的save方法也会同样进行字段类型检查。虽然在很多情况下,数据库本身也会进行数据转换,但是对于某些数据库要求严格检查数据类型的情况会有帮助。

 

二、在使用数组方式的普通查询条件后

例如:

$User M("User"); // 实例化User对象

$condition['id'] = '1 OR 1=1';

// 把查询条件传入查询方法

$User->where($condition)->select()

对于这样的一个查询条件,在进行数据库查询之前,会对查询的数组条件进行字段类型检查,直接就把id的值强制转换为1然后再进行查询操作。

即使不进行强制转换,系统也会进行安全过滤,把这样的非法数据进行转义,区别在于这样对于数据库更加安全,对于某些数据库要求严格检查数据类型的情况会有帮助。

 


站长教学网 免责声明