首先,我必须说这是我的第二个问题(第一个被关闭,因为我没有很好地解释我的问题)
我正在建立应由50-60名员工使用的数据库。在我们的基地中,我们有许多客户(1行= 1个客户)。想法是,当雇员打开页面时,它应该显示一个客户,但是如果另一个雇员打开同一页面,则应该显示另一个客户(我想避免如果2个雇员同时按下刷新按钮的情况,该页面不会显示相同的客户。
我有这个php代码,用于获取基本数据,但是如果我在同一时间推送刷新,它将在2 PC上给我相同的结果。我如何避免这种情况
在表telesales_anc中,我有“ Lock_ID”列,当页面打开时,php用“ 1”将其更新
是否有任何功能“保持”该行的连接或类似功能?我尝试用谷歌搜索它,但是我只找到了一些带有计时器的解决方案(但是我认为这是个坏主意,仍然可以同时打开2个Emlpoyes)
$MSISDN = "SELECT MSISDN FROM telesales_anc WHERE Lock_ID != 1 LIMIT 1";
$result = $mysqli->query($MSISDN);
while ( $row = $result->fetch_assoc() ) {
$IDcheck = "SELECT ID FROM telesales_anc WHERE '{$row['MSISDN']}' = MSISDN";
$result_IDcheck = $mysqli->query($IDcheck);
while ( $row = $result_IDcheck->fetch_assoc()) {
$lock_ID = "UPDATE telesales_anc SET Lock_ID = 1 where '{$row['ID']}' = ID";
$result_ID = $mysqli->query($lock_ID);
}}
最佳答案
我在很短的时间内添加了usleep()来等待其他用户锁定,并在第二个sql AND Lock_ID!=1
中进行了少量更改,因此,如果其他用户锁定了它,则您将无法获取此代码,请注意,您需要一些循环来重试获取解锁的一个
$MSISDN = "SELECT MSISDN FROM telesales_anc WHERE Lock_ID != 1 LIMIT 1";
$result = $mysqli->query($MSISDN);
usleep(rand(100000,300000)); // we are sleeping randomly between 0.1 - 0.3 seconds for waiting the other users lock
while ( $row = $result->fetch_assoc() ) {
$IDcheck = "SELECT ID FROM telesales_anc WHERE '{$row['MSISDN']}' = MSISDN AND Lock_ID != 1";
$result_IDcheck = $mysqli->query($IDcheck);
while ( $row = $result_IDcheck->fetch_assoc()) {
$lock_ID = "UPDATE telesales_anc SET Lock_ID = 1 where '{$row['ID']}' = ID";
$result_ID = $mysqli->query($lock_ID);
}}
关于php - 每位使用者的php限制检视,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46467971/