Подскажите по транзакциям MySQL

k0t
На сайте с 13.07.2008
Offline
99
k0t
229

Есть скрипт пополнения/снятия денег с баланса, но не пойму в чем ошибка.

Если на 4 строчке ставлю $flag в FALSE, то в таблице transactions запись не появляется - это ОК, так и должно быть, но выполняется второй запрос, который обновляет баланс пользователя. Почему ROLLBACK не происходит - объясните?

$uid = "54";
$sum = "10.00";
$oper = "popolnenie";
$flag = FALSE;

$mysqli->query("START TRANSACTION");
$query = $mysqli->query("SELECT `balance` FROM `users` WHERE `id`='${uid}'");
if ($query->num_rows == 1) {
if($mysqli->query("INSERT INTO `transactions` (`user_id`,`sum`,`operation`,`date`) VALUES ('{$uid}','{$sum}','{$oper}',NOW())") === FALSE) {
$flag = FALSE;
}

if($mysqli->query("UPDATE `users` SET `balance`=`balance`+{$sum} WHERE `id`='{$uid}'") === FALSE) {
$flag = FALSE;
}
} else {
$flag = FALSE;
}

if($flag) {
$mysqli->query("COMMIT");
echo "COMMIT!";
} else {
$mysqli->query("ROLLBACK");
echo "ROLLBACK!";
}

Решено: ALTER TABLE `users` ENGINE = InnoDB

Станислав
На сайте с 27.12.2009
Offline
255
#1

`id`='${uid}'"); 

`id`='{$uid}'"); 
Мы там, где рады нас видеть.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий