Мой код,
$dbc -> beginTransaction();
$dbc -> query("LOCK TABLES items WHERE id = " . $user['id'] . " WRITE");
$q = $dbc -> prepare("UPDATE items SET shrapnel = ?, bank = ? WHERE id = ?");
$q -> execute(array($user['shrapnel'] - $_POST['deposit'], $user['bank'] + $_POST['deposit'], $user['id']));
$dbc -> query("UNLOCK TABLES items WHERE id = " . $user['id'] . "");
$dbc -> commit();
Довольно просто на самом деле, нужно убедиться, что никто другой не сможет прочитать или записать значения строки пользователя в таблице. Нужно убедиться, что он откатывается, если что-то идет не так!
Если я не произвожу отката explicity и что-то не получится, изменения не произойдут?
И является ли это верным способом убедиться в том, что, хотя это утверждение зафиксировано, что другие пользователи не смогут прочитать или обновить эти значения, чтобы избежать полной катастрофы?
Я использую InnoDB, который поддерживает блокировку на уровне строк.