如果用户调用两个请求,这将检查用户余额,然后对余额执行操作,该怎么办。会引起任何问题吗?例如,这两个代码:
$user = User::find(1);
if($user['balance']>250) {
// Here for example long loop
$user->update([
'balance' => DB:raw('balance - 100')
]);
}
第二个脚本在做类似的事情。可能是这样的情况:在第一个请求中如果if语句被传递,则执行长循环,同时在第二个请求运行中,如果检查余额,并且如果在第一个请求中$user->update()
被执行之前执行了此操作,那么用户可以当他没有余额时通过if语句?
答案 0 :(得分:1)
是的,可能是这种情况。为避免这种情况,请使用 LOCK / UNLOCK TABLE
$user = User::find(1);
if($user['balance']>250) {
User::lockTable(); // method name/use depends on your framework
// Here for example long loop
$user->update([
'balance' => DB:raw('balance - 100')
]);
User::unlockTable();
}