保存数据时自动检测字段长度并裁剪【TP3.2.3】

浏览:2246 最后更新:2015-06-08 09:49 分类:其他
默认情况下,如果在使用$db->add($data)来新增数据时,如果某一列的数据长度过长,超过该字段字义值时。在有些机器的mysql配置下,只会产生warn,同时,数据会截断,只保留字段长度位数的数据内容并成功保存,一般情况下,mysql就会报错,导致数据程序异常,无法正常写入

本例通过修改Model.class.php文件,实现对数据写入前的自动校验。如果字段长度过长,则自动裁剪成字段大小。
比如一个字段是varchar(100)的,但写入的数据长度达到150时。通过$db->add($data)方法新增时,会自动将数据只取前100位,达到安全写入的效果。

通过参数DB_TOOLS_CHECKLENGTH来控制(true|false),默认为false

文件可以替换 TP3.2.3的
ThinkPHP/Library/Think 目录下


如果自行修改,则将此文件中最后几个fn打头的函数复制过来,并且找到

protected function _facade($data) {

函数,找到
// 字段类型检查 和 强制转换
$this->_parseType($data,$key);

在其后面加上一句
$this->fn_checkFieldLength($val,$key);


即可

同时,将循环foreach中的$val改成传址的


foreach ($data as $key=>$val){

改成

foreach ($data as $key=>&$val){
评论( 相关
后面还有条评论,点击查看>>