21:21 |
Jane (SV!) (21.01.2013 / 17:45) ваш любимый админ |
Изм. Jane (21.01.2013 / 17:47) [2]
Jane (SV!) (21.01.2013 / 17:46) ваш любимый админ |
<?php
$id1 = 1;
$id2 = 1;
$ball =100;
mysql_query("update `users` SET `balans` = `balans` - '".$ball."' where `id` = '".$id1."'");
mysql_query("update `users` SET `balans` = `balans` + '".$ball."' where `id` = '".$id2."'");
?>
Jane (SV!) (21.01.2013 / 17:46) ваш любимый админ |
Если баллы вычлись, но не успели по какой-то причине прибавиться (не прошел второй запрос), то возникает проблема, которая может вызвать недовольство тех самых людей, производивших обмен.
В этом случае и стоит использовать транзакции. Тогда выполнятся либо оба запроса одновременно, либо ни один.
Условия для использования транзакций - это наличие транзакционный тип таблицы.
По умолчанию таблица имеет тип MyISAM, поэтому первым делом мы меняем тип своей таблицы на InnoDB, а потом пишем такой код:
Jane (SV!) (21.01.2013 / 17:46) ваш любимый админ |
<?php
mysql_query('SET AUTOCOMMIT=0');
mysql_query('START TRANSACTION');
$id1 = 1;
$id2 = 1;
$ball =100;
$query1 = mysql_query("update `users` SET `balans` = `balans` - '".$ball."' where `id` = '".$id1."'");
$query2 = mysql_query("update `users` SET `balans` = `balans` + '".$ball."' where `id` = '".$id2."'");
if ($query1 and $query2) {
mysql_query('COMMIT');
echo 'Данные успешно записались';
}
else {
mysql_query('ROLLBACK');
echo 'Ошибка. Произведен откат баз в предыдущее состояние.';
exit;
}
?>
Изм. Jane (21.01.2013 / 17:48) [1]
Jane (SV!) (21.01.2013 / 19:48) ваш любимый админ |
Мила (Adm) (26.11.2019 / 18:36) Всем добра и человечности |
Он вообще не кодер. Так,абы на мусорить!
КОШМАР-2 (29.11.2019 / 05:28) ГЕНИЙ |
Теперь с вами все ясно, почему у вас дырявые скрипты!
Я с вами даже спорить не буду!
Хахаха
Скачать темуНовые вверху