PHP mysql数据库在同一表上同时请求两个

时间:2019-03-01 22:03:58

标签: php mysql sql

如果用户调用两个请求,这将检查用户余额,然后对余额执行操作,该怎么办。会引起任何问题吗?例如,这两个代码:

$user = User::find(1);
if($user['balance']>250) {
    // Here for example long loop
    $user->update([
        'balance' => DB:raw('balance - 100')
    ]);
}

第二个脚本在做类似的事情。可能是这样的情况:在第一个请求中如果if语句被传递,则执行长循环,同时在第二个请求运行中,如果检查余额,并且如果在第一个请求中$user->update()被执行之前执行了此操作,那么用户可以当他没有余额时通过if语句?

1 个答案:

答案 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();
}