ecmall数据库操作方法add,判断是否插入成功

使用ecmall的add时,可能会碰到这种情况,调用model类的add方法插入数据时,如果插入的数据的主键不是自增ID,就会返回空值,无法判断是否插入成功。
刚开始时没注意,还以为是因为我的sql语句写错了呢,后来翻了下base.model类下的add方法,才发现是本身的BUG,不得不再说一遍,ecmall代码写的实在是太…..

function add($data, $compatible = false){
    if (empty($data) || !$this->dataEnough($data))    {
        return false;
    }
    $data = $this->_valid($data);
    if (!$data){
        $this->_error('no_valid_data');
        return false;
    }
    $insert_info = $this->_getInsertInfo($data);
    $mode = $compatible ? 'REPLACE' : 'INSERT';
    $this->db->query("{$mode} INTO {$this->table}{$insert_info['fields']} VALUES{$insert_info['values']}");
    $insert_id = $this->db->insert_id();
    if ($insert_id){
        if ($insert_info['length'] > 1){
            for ($i = $insert_id; $i < $insert_id + $insert_info['length']; $i++){
                $id[] = $i;
            }
        }else{
            /* 添加单条记录 */
            $id = $insert_id;
        }
    }
    return $id;
}

这里用的是php内置函数mysql_insert_id()返回了上一步 INSERT 操作产生的 ID。如果上一查询没有产生 AUTO_INCREMENT 的 ID,则 mysql_insert_id() 返回 0。
而我们很多时候会需要用到判断插入是否成功,所以我把原方法改了下,先判断是否有插入ID,如果没有,就判断是否执行成功,成功就返回true。

function add($data, $compatible = false){
    if (empty($data) || !$this->dataEnough($data)){
        return false;
    }
    $data = $this->_valid($data);
    if (!$data){
        $this->_error('no_valid_data');
        return false;
    }
    $insert_info = $this->_getInsertInfo($data);
    $mode = $compatible ? 'REPLACE' : 'INSERT';

    $query=$this->db->query("{$mode} INTO {$this->table}{$insert_info['fields']} VALUES{$insert_info['values']}");
    
    $insert_id = $this->db->insert_id();
    
    if ($insert_id){
        if ($insert_info['length'] > 1){
            for ($i = $insert_id; $i < $insert_id + $insert_info['length']; $i++){
                $id[] = $i;
            }
        }else{
            /* 添加单条记录 */
            $id = $insert_id;
        }
    }else{
        //由于不是自增ID 返回的为空 无法判断是否添加成功 故加了一个这个判断。//Sin
    	if($query){
    		return true;
    	}else{
    		return false;
    	}
    }
    return $id;
}

以上仅仅是为了满足本项目中开发而更改的,算是为各位看官起一个抛砖引玉的作用吧。

请把最起码的版权请留给博主,谢谢!

http://www.ruesin.com/open/ecmall/ecm_add-105.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值