幻想曲 发表于 2012-2-2 15:53:25

CI中的事务怎么用?

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 transactionupdate userinfo set amount=amount-10.00 where uid=927为什么会产生这样的错误?难道不是用$this->db->trans_start()调用?

huboo82 发表于 2012-2-2 17:26:54

要处理的事务要放在

$this->db->trans_start();
...
$this->db->trans_complete();

之间
页: [1]
查看完整版本: CI中的事务怎么用?