После создания объекта нужно вызвать всего лишь один метод, в который передаем два значения.Запутался в методе реализации блокировки БД.
<?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.
Не забываем после
Никто базу не блокирует, блокируется только указанная таблица. Для 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 - это не доступно.
Не для всех типов таблиц транзакции поддерживаются. Для большинства, которые используют MyISAM - это не доступно.