| 00:52 |        | 
|   |  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)  ГЕНИЙ | 
Теперь с вами все ясно, почему у вас дырявые скрипты!
Я с вами даже спорить не буду!
Хахаха
Скачать темуНовые вверху







 
 .gif)


