用户
 找回密码
 入住 CI 中国社区
搜索
查看: 2840|回复: 1
收起左侧

[HELP] CI中的事务怎么用?

[复制链接]
发表于 2012-2-2 15:53:25 | 显示全部楼层 |阅读模式
PHP复制代码
class Consume_model extends CI_Model
{
    public function __construct()
    {
        parent::__construct();
    }
 
 
    /**
     * 扣费操作
     * @param array $orderinfo
     * @return number
     */

    public function addconsume(array $orderinfo)
    {
        $this->db->trans_start();
        $sql="select amount from userinfo where uid=".$orderinfo['uid']." for update";
        $val = $this->db->query($sql)->row()->amount;
 
        if(!$val || ($val<$amount))
        {
            $this->db->trans_complete();
            return -1;  //余额不足
        }
        $this->db->query("update userinfo set amount=amount-".$orderinfo['amount']." where uid=".$orderinfo['uid']);
        $this->db->query("......................");
        $this->db->trans_complete();
        return $this->db->trans_status();
    }
}
 
 
复制代码


每次执行这个地方就会出错:

Lock wait timeout exceeded; try restarting transaction

update userinfo set amount=amount-10.00 where uid=927

为什么会产生这样的错误?难道不是用$this->db->trans_start()调用?


发表于 2012-2-2 17:26:54 | 显示全部楼层
要处理的事务要放在
PHP复制代码
 
$this->db->trans_start();
...
$this->db->trans_complete();
 
复制代码

之间

本版积分规则