[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Самодельная реализация транзакций для MySQL
DorianLeroy
Задача стоит следующая. Заблокировать изменени БД, пока БД выполняет какие то операции.
После создания объекта нужно вызвать всего лишь один метод, в который передаем два значения.Запутался в методе реализации блокировки БД.
<?php
// Устанавливаем соединение с базой данных
require_once("config.php");

class shop
{
public static $lock = false;

// Вывод диагностического сообщения
private function error_print($str)
{
// Освобождаем таблицу
shop::$lock = false;
// Выводим диагностическое сообщение
echo $str;
}

public function buy($id_user, $buy_count)
{
// Преобразуем параметр в целое число
$id_user = intval($id_user);
// Проверяем, не занята ли база данных другим
// покупателем

$count = 0;
while(shop::$lock)
{
// Приостанавливаем работу программы
// на 1 секунду

sleep(1);
$count++;
// После 30 попыток покидаем метод
if($count > 30) return false;
}

// База данных доступна - занимаем ее
shop::$lock = true;

// Осуществляем операции транзакции

/********************************

Здесь происходят операции по изменению данных в бд

******************************/

// Освобождаем таблицу
shop::$lock = false;
// Возвращаем значение true, сигнализирующее об
// успешном завершении транзакции

return true;
}
}

?>


Собственно непонятен сам цикл while. Изначально у нас переменная $lock равна нет. Когда мы проходим по циклу while какое значение у while истина или ложь? И зачем приостанавливать работу программы на 1 секунду?



Спустя 22 минуты, 3 секунды (31.01.2011 - 13:46) Evilsoul написал(а):
где ты это взял? а зачем блокировать базу? какой в этом смысл?

Спустя 6 минут, 40 секунд (31.01.2011 - 13:53) linker написал(а):
MySQL
LOCK TABLES

Спустя 1 минута, 21 секунда (31.01.2011 - 13:54) Evilsoul написал(а):
linker
зачем блокировать базу?

Спустя 3 минуты, 50 секунд (31.01.2011 - 13:58) linker написал(а):
Evilsoul
Никто базу не блокирует, блокируется только указанная таблица. Для DELETE, UPDATE, INSERT можно применять LOW_PRIORITY.
Не забываем после
LOCK TABLES `tablename`
сделать
UNLOCK TABLES

Спустя 1 час, 51 минута, 6 секунд (31.01.2011 - 15:49) Arni написал(а):
Кому это вообще надо? MySQL поддерживает механизм транзакций, в чем суть данного творения?

Спустя 2 минуты, 44 секунды (31.01.2011 - 15:52) linker написал(а):
Arni
Не для всех типов таблиц транзакции поддерживаются. Для большинства, которые используют MyISAM - это не доступно.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.