多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 字段类型验证 [上一页](153.html "上一页")[下一页](155.html "下一页") 新版的ThinkPHP具有字段类型检测,对于不合法的字段数据会进行强制转换。字段类型检测可以用于数据写入和数据查询操作。 需要启用字段类型检测的话,需要在配置文件中开启DB_FIELDTYPE_CHECK参数:`'DB_FIELDTYPE_CHECK'=>true,  // 开启字段类型验证`如果在非调试模式下面开启字段类型检测后,请清空字段缓存目录(位于Runtime/Data/_fields/),重新生成字段缓存的时候,会在缓存文件中记录字段的类型信息。这是后面进行字段类型检测的前提。 字段类型检测主要在两个阶段会自动处理: 一、在数据写入到数据库之前 例如:`$User = M("User"); // 实例化User对象<br class="calibre5"></br>// 然后直接给数据对象赋值<br class="calibre5"></br>$User->name = 'ThinkPHP';<br class="calibre5"></br>$User->score = '2ThinkPHP';<br class="calibre5"></br>// 把数据对象添加到数据库<br class="calibre5"></br>$User->add();`由于用户表的score设计的是数字类型,所以实际写入数据库之前,score属性的值已经被强制进行intval转换了,模型的save方法也会同样进行字段类型检查。虽然在很多情况下,数据库本身也会进行数据转换,但是对于某些数据库要求严格检查数据类型的情况会有帮助。 二、在使用数组方式的普通查询条件后 例如:`$User = M("User"); // 实例化User对象<br class="calibre5"></br>$condition['id'] = '1 OR 1=1';<br class="calibre5"></br>// 把查询条件传入查询方法<br class="calibre5"></br>$User->where($condition)->select(); `对于这样的一个查询条件,在进行数据库查询之前,会对查询的数组条件进行字段类型检查,直接就把id的值强制转换为1然后再进行查询操作。 即使不进行强制转换,系统也会进行安全过滤,把这样的非法数据进行转义,区别在于这样对于数据库更加安全,对于某些数据库要求严格检查数据类型的情况会有帮助。 [上一页](153.html "上一页")[下一页](155.html "下一页")