如何控制多个用户的并发操作

时间:2015-08-08 08:52:36

标签: php mysql concurrency

我会尝试将问题清晰简明,我正在为一家快递公司开发基于php的应用程序,其中多个用户可以登录包含多个文本框字段和两个按钮的页面,第一个按钮(添加新)用于自动生成尚未插入数据库的新的空文档编号,第二个按钮(保存)用于将从文本框字段获取的数据与文档编号一起插入数据库,

现在,假设有两个用户同时登录该页面,并且他们都希望将数据插入数据库,假设user1按下“Add New”按钮并获得一个文档编号,例如1000和at同时user2也按下“添加新”按钮并获取已分配给user1的相同文档编号,因为user1尚未按下“保存”按钮,这意味着文档编号1000甚至不包含单行在数据库中因为没有用户按下“保存”按钮。

如果user1按下“保存”按钮,将数据插入到文档编号为1000的数据库中,然后user2出现并按“添加新”,他将获得一个递增的值,即1001,它对我来说很好。

我的问题是,如果两个用户同时按下“添加新”按钮,如何分配不同的文档编号?

任何人都可以帮我解决这个问题吗?是的,提前谢谢:)

1 个答案:

答案 0 :(得分:-1)

public static $is_locked = false;

function issue_document_number($params_if_required){
   //for core php write this line 
   global $is_locked; 
   $is_locked = true;
   //for OOP, if you are in class
   $this->is_locked = true;

   //make your calculations here to get desired number

   $is_locked = false;       
   return $document_number;
}

在调用时检查函数是否被锁定sleep 1或2秒,然后再次调用

while($is_locked==true){
   sleep(1);
}
$my_unique_number = issue_document_number($params_if_required);

进行查询并添加数据库