рекламаПродажа VIP-баллов
logo
16:33 reload ? prev home

Последняя активность

Форум | Вап-мастеру | Сайтостроение
Поиск
Вниз  SQL Транзакции
Jane  Jane (SV!) off (21.01.2013 / 17:45)
 ваш любимый админ
* - 0 + 0
Рассмотрим такую ситуацию! Предположим, наш скрипт состоит из нескольких последовательно выполняющихся запросов в базу данных, на середине выполнения скрипта заглючил, например, хост, да так, что часть запросов в базу отправилась, а часть нет. В некоторых случаях такой глюк может быть не очень приятным. Например, наш скрипт осуществлял обмен баллами между юзерами.
Изм. Jane (21.01.2013 / 17:47) [2]
Jane  Jane (SV!) off (21.01.2013 / 17:46)
 ваш любимый админ
* - 0 + 0
<?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  Jane (SV!) off (21.01.2013 / 17:46)
 ваш любимый админ
* - 0 + 0
Вначале мы вычли баллы у юзера с id 1, потом прибавили их юзеру с id 2.
Если баллы вычлись, но не успели по какой-то причине прибавиться (не прошел второй запрос), то возникает проблема, которая может вызвать недовольство тех самых людей, производивших обмен.
В этом случае и стоит использовать транзакции. Тогда выполнятся либо оба запроса одновременно, либо ни один.
Условия для использования транзакций - это наличие транзакционный тип таблицы.
По умолчанию таблица имеет тип MyISAM, поэтому первым делом мы меняем тип своей таблицы на InnoDB, а потом пишем такой код:
Jane  Jane (SV!) off (21.01.2013 / 17:46)
 ваш любимый админ
* - 0 + 0
<?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]
Grafen  Grafen off (21.01.2013 / 19:47)
 lol
* - 0 + 0
полезный код
Jane  Jane (SV!) off (21.01.2013 / 19:48)
 ваш любимый админ
* - 0 + 0
Grafen, в паззлы всунула, чет там подглючивало, а может и нет, но может подглючить без этой фигни
КОШМАР-2  КОШМАР-2 off (24.11.2019 / 07:58)
 ГЕНИЙ
* - 0 + 0
$id1 = 1;
$id2 = 1;
ReaLs  ReaLs off (26.11.2019 / 14:32)
* - 0 + 0
КОШМАР-2 (24.11.2019 / 07:58)
$id1 = 1;
$id2 = 1;
Jane  Jane (SV!) off (26.11.2019 / 17:10)
 ваш любимый админ
* - 0 + 0
ах вы!!!
Мила  Мила (Adm) off (26.11.2019 / 18:36)
 Всем добра и человечности
* - 0 + 0
ReaLs (26.11.2019 / 14:32)
Он вообще не кодер. Так,абы на мусорить!
КОШМАР-2  КОШМАР-2 off (29.11.2019 / 05:28)
 ГЕНИЙ
* - 0 + 0
Тут же небыло никакого перевода, у кого взял тому и положил - все осталось на месте!
Теперь с вами все ясно, почему у вас дырявые скрипты!
Я с вами даже спорить не буду!
Хахаха
Вверх  Всего: 11

Фильтр по автору
Скачать тему

В Форум

Новые вверху
На главную
Джулиан
Be Happy! :)
JohnTop
© JohnCMS