插入或更新 enum类型包含有double,int等的bug

浏览:1330 发布日期:2013/07/05
3.1.3 - 普通 - 已处理
我有个表a_fields,其中有个字段 datatype enum('datetime','double','string','int','float','bool','','array','dict') 类型

以下代码会使datatype的值为0M('fields')->where(array('ID'=>$id))->setField('datatype',trim($_POST['datatype']));原因:
Runtime/Data/_fields/ 的字段缓存'datatype' => 'enum(\'datetime\',\'double\',\'string\',\'int\',\'float\',\'bool\',\'\',\'array\',\'dict\')'Model.class.php 类的 _parseType 方法误过滤了,他把包含有 这些类型字符串都做相应的转换,但这不是我想要的。    protected function _parseType(&$data,$key) {
        $fieldType = strtolower($this->fields['_type'][$key]);
        if(false === strpos($fieldType,'bigint') && false !== strpos($fieldType,'int')) {
            $data[$key]   =  intval($data[$key]);
        }elseif(false !== strpos($fieldType,'float') || false !== strpos($fieldType,'double')){
            $data[$key]   =  floatval($data[$key]);
        }elseif(false !== strpos($fieldType,'bool')){
            $data[$key]   =  (bool)$data[$key];
        }
    }
目前的解决方法 只有用 原始的SQL解决。//这种方式就不行
M('fields')->where(array('ID'=>$id))->setField('datatype',trim($_POST['datatype']));

//这种方式就可以
M('fields')->execute("UPDATE `__TABLE__` SET `datatype`='" . trim($_POST['datatype']) . "' WHERE ( `ID` = {$id} )")
评论(
后面还有条评论,点击查看>>