事务 编辑

mysql 数据库事务主要是三个函数的结合使用:

beginTransaction() // 开始
commit() // 提交
rollBack() // 回滚


具体实例使用如下,创建一个订单并扣减库存,如果任何一步失败,就回滚(什么事都没发生)

$model = m('order');

$model->beginTransaction();
try {
    $data = array(
        'user_id' => 'cleey',
        'price'   => 150.00,
    );
    // 添加订单
    $id = $model->insert($data);
    if (!$id) {
        throw new \Exception('add order err');
    }
    // 扣减库存
    $re = m('goods')->where(array('goods_id' => 1))->setDec('num', 1);
    if (!$re) {
        throw new \Exception('update goods num err');
    }

    // 提交
    $model->commit();
} catch (\Exception $e) {
    // 回滚
    $model->rollBack();
    $msg = $e->getMessage();
    ajax(-1, $msg); // 返回错误信息
}