【发布时间】:2011-11-22 09:28:06
【问题描述】:
我正在创建一个系统,该系统涉及许多用户在短时间内预订门票,总共只能进行一定数量的预订。假设有 600 张门票,可能在 3 小时或更短的时间内全部预订完毕。
理想情况下,我想确保不达到预订限制,因此在创建预订之前,我会检查是否可以根据可用门票数量进行预订。至关重要的是,我需要确保在检查和将票证分配给用户之间没有发生任何更新,以确保不会超过票证限制。
我正在尝试使用 mysql 表写入锁来实现这一点,但是在 codeigniter 框架中实现这一点时遇到了问题。在处理这个问题的模型中,我创建了几个函数,一个用于创建预订,另一个用于计算不同类型门票的数量。问题是他们似乎没有共享相同的数据库会话,因为他们的票务计数功能被锁定了。
执行顺序是
- 在控制器中运行 $this->model_name->create_reservation
- 在model_name中运行锁查询->create_reservation
- model_name 中的调用计数方法->create_reservation
- counting function(这是model_name类中的一个方法)锁死了,大概是因为使用了不同的数据库session?
在模型__construct方法中用$this->load->database()加载数据库库;
有什么想法吗?
【问题讨论】:
-
我对CI不熟悉,但是解决方法是使用
transactions。我想 CI 提供了开始/结束事务的方法,我会调查一下。
标签: php mysql database codeigniter database-locking