我会尝试将问题清晰简明,我正在为一家快递公司开发基于php的应用程序,其中多个用户可以登录包含多个文本框字段和两个按钮的页面,第一个按钮(添加新)用于自动生成尚未插入数据库的新的空文档编号,第二个按钮(保存)用于将从文本框字段获取的数据与文档编号一起插入数据库,
现在,假设有两个用户同时登录该页面,并且他们都希望将数据插入数据库,假设user1按下“Add New”按钮并获得一个文档编号,例如1000和at同时user2也按下“添加新”按钮并获取已分配给user1的相同文档编号,因为user1尚未按下“保存”按钮,这意味着文档编号1000甚至不包含单行在数据库中因为没有用户按下“保存”按钮。
如果user1按下“保存”按钮,将数据插入到文档编号为1000的数据库中,然后user2出现并按“添加新”,他将获得一个递增的值,即1001,它对我来说很好。
我的问题是,如果两个用户同时按下“添加新”按钮,如何分配不同的文档编号?
任何人都可以帮我解决这个问题吗?是的,提前谢谢:)
答案 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);
进行查询并添加数据库