Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / INSERT в несколько таблиц и блокировки/транзакции / 25 сообщений из 26, страница 1 из 2
14.08.2014, 13:03:05
    #38720180
iova1984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в несколько таблиц и блокировки/транзакции
Здравствуйте! Очень навязчивый вопрос, который не даёт мне покоя!
Есть автомобильный сайт. Пользователи вбивают свои объявы о продаже. Затронуты следующие таблицы:

// Запись в общую для всех таблицу
1. INSERT INTO `таблица_авто_общая`
$my_id = mysql_insert_id();

// Запись в таблицу типа транспортного средства (легковой, грузовой, спецтехника)
2. INSERT INTO `таблица_типа_авто` WHERE id=$my_id

// Запись в таблицу комплектаций (ABS, Магнитола, Люк, Электрозеркала)
3. INSERT INTO `таблица_комплектаций_авто` WHERE id=$my_id

// Загружаем фото тачки в файловую систему
4. uppload_auto_images($my_id);

// Названия загруженных фоток вставляем в
5. INSERT INTO `таблица_фотографий_авто` WHERE id=$my_id

Итого - запись идёт в 4 таблицы + загрузка фоток на сервер (php-функция)



Всё работает, но боюсь что если одновременно куча народу с разных компов будет объявление своё подавать - всё может перепутаться к чёрту! Да и постоянно xml-файлы с кучей объявлений будут приходить, которые специальный скрипт постоянно парсит и подобным образом запихивает тачки в базу.
Или mysql сама берёт на себя задачи по блокировки и ни чей чужой поток не вклинится?
Транзакции я использовать не могу тк у меня не используется php-класс PDO. Остаются только блокировки на запись. Вот и думаю - может в моём случае не нужны и даже блокировки? Мускул сам следит?

Спасибо.
...
Рейтинг: 0 / 0
14.08.2014, 13:15:22
    #38720192
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в несколько таблиц и блокировки/транзакции
iova1984Транзакции я использовать не могу тк у меня не используется php-класс PDO.Расширение mysqli умеет работать с транзакциями - чтобы это выяснить, достаточно поискать "php mysqli transaction".

iova1984Вот и думаю - может в моём случае не нужны и даже блокировки? Мускул сам следит?Вы показали несколько огрызков скл-запросов и вызов одной пхп-функции, и хотите, чтобы вам на основании этих данных дали ответ? Навряд ли среди форумчан найдётся хоть один человек с прокачанной до такого уровня телепатией :)
...
Рейтинг: 0 / 0
14.08.2014, 13:21:43
    #38720199
iova1984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в несколько таблиц и блокировки/транзакции
tangliriova1984Транзакции я использовать не могу тк у меня не используется php-класс PDO.Расширение mysqli умеет работать с транзакциями - чтобы это выяснить, достаточно поискать "php mysqli transaction".

iova1984Вот и думаю - может в моём случае не нужны и даже блокировки? Мускул сам следит?Вы показали несколько огрызков скл-запросов и вызов одной пхп-функции, и хотите, чтобы вам на основании этих данных дали ответ? Навряд ли среди форумчан найдётся хоть один человек с прокачанной до такого уровня телепатией :)

Я привёл в упрощённом виде. Реально у меня так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
INSERT INTO `таблица_авто_общая`;

if($type == 'легковой') INSERT INTO car;
elseif($type == 'грузовой') INSERT INTO truck;
elseif($type == 'больдозер') INSERT INTO bulldozer;

INSERT INTO `таблица_комплектаций_авто`;
uppload_auto_images();
INSERT INTO `таблица_фотографий_авто`



Так что тут при всём желании транзакции не сделаешь - ведь запросы идут не сплошняком, а между ними есть php-условия IF/ELSE, да и php-функции типа uppload_auto_images();

И я даже не о транзакциях, я про то, - не спутаются ли записи если куча народу будет свои тачки вбивать.....
...
Рейтинг: 0 / 0
14.08.2014, 13:32:14
    #38720215
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в несколько таблиц и блокировки/транзакции
iova1984Так что тут при всём желании транзакции не сделаешь - ведь запросы идут не сплошнякомТранзакции к "запросы идут не сплошняком" не имеют никакого отношения.

И даже у случае использования mysql не вижу почему нельзя сделать mysql_query('START TRANSACTION') а потом mysql_query('COMMIT').


iova1984не спутаются ли записи если куча народу будет свои тачки вбиватьСамо слово "спутаются" тут не применимо. В записи записывается ровно то, что вы туда запишете.
...
Рейтинг: 0 / 0
14.08.2014, 13:51:44
    #38720252
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в несколько таблиц и блокировки/транзакции
iova1984я про то, - не спутаются ли записи если куча народу будет свои тачки вбиватьlast_insert_id() выводит ид последней добавленной записи в рамках сессии
не спутаются
...
Рейтинг: 0 / 0
14.08.2014, 13:58:42
    #38720261
iova1984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в несколько таблиц и блокировки/транзакции
tangliriova1984я про то, - не спутаются ли записи если куча народу будет свои тачки вбиватьlast_insert_id() выводит ид последней добавленной записи в рамках сессии
не спутаются

ага, с этим тогда всё ясно - с "LOCK TABLES" на WRITE- нет смысла загоняться. Единственное как я понял, где можеть быть "засада" - это то, что при сбое сервера часть INSERT-во может не выполниться. Соответственно, копать нужно именно в сторону транзакций. Я прав?
...
Рейтинг: 0 / 0
14.08.2014, 16:37:53
    #38720519
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в несколько таблиц и блокировки/транзакции
iova1984tanglirпропущено...
last_insert_id() выводит ид последней добавленной записи в рамках сессии
не спутаются

ага, с этим тогда всё ясно - с "LOCK TABLES" на WRITE- нет смысла загоняться. Единственное как я понял, где можеть быть "засада" - это то, что при сбое сервера часть INSERT-во может не выполниться. Соответственно, копать нужно именно в сторону транзакций. Я прав?

а там и копать нечего...

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
$sql = "

[SRC sql]
start transaction;

insert into table ('fdk','fjdksfj',10,342);
set @a = LAST_INSERT_ID();

insert into table2('fjdks',32,@a);

insert into table3('fjdkfsdafasds',3322,@a);
......

commit;




";

[/SRC]

правдай есть такие драйвера что не позволяют за один заход много запросов послать...но опять же...это всё в рамках одной сесии, тогда тоже самое что и выше только

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
$sql = array();

$sql[0] = 'set local autocommit= 0;';


$sql[1] = 'start transaction;';
$sql[2] = '<the same like above>;';
....
$sql[10] = 'commit;';


и в цикле выполнить по одной команде
...
Рейтинг: 0 / 0
14.08.2014, 17:02:48
    #38720577
iova1984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в несколько таблиц и блокировки/транзакции
alex564657498765453iova1984пропущено...


ага, с этим тогда всё ясно - с "LOCK TABLES" на WRITE- нет смысла загоняться. Единственное как я понял, где можеть быть "засада" - это то, что при сбое сервера часть INSERT-во может не выполниться. Соответственно, копать нужно именно в сторону транзакций. Я прав?

а там и копать нечего...

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
$sql = "

[SRC sql]
start transaction;

insert into table ('fdk','fjdksfj',10,342);
set @a = LAST_INSERT_ID();

insert into table2('fjdks',32,@a);

insert into table3('fjdkfsdafasds',3322,@a);
......

commit;




";

[/SRC]

правдай есть такие драйвера что не позволяют за один заход много запросов послать...но опять же...это всё в рамках одной сесии, тогда тоже самое что и выше только

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
$sql = array();

$sql[0] = 'set local autocommit= 0;';


$sql[1] = 'start transaction;';
$sql[2] = '<the same like above>;';
....
$sql[10] = 'commit;';


и в цикле выполнить по одной команде

Ух ты - спасибо, а то я думал что без PDO транзакции не сделать. Ладно бы ИНСЕРТЫ друг-за-другом шли, но меня смущали php-вставки между ИНСЕРТАМИ типа if/elseif и php-функции загрузки фоток на сервер. А ваш вариант меня заинтересовал!
Я использую mysqldb_class.php. Там связь с базой идёт так:
$db = new db_MySQL;
$db->Connect();
и тд.

Соответственно я не могу за 1 ход много запросов послать - не поддерживает данный класс такого. Буду пробовать и тестировать ваш 2-й вариант, спасибо!
...
Рейтинг: 0 / 0
14.08.2014, 17:11:31
    #38720589
iova1984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в несколько таблиц и блокировки/транзакции
И кстати, про транзакции, никак не пойму:
После START TRANSACTION - идёт набор запросов (INSERTов в моём случае).
А в конце - либо COMMIT (внести изменение), или ROLLBACK (отменить, откатить). И вот: Явно указать мне COMMIT - если в каком-то из INSERT-ов ошибка - мускул сам его заменит на ROLLBACK? Или же каждый из INSERT-ов самому проверять на наличие ошибки - если попалась ошибка - писать в конце ROLLBACK, если всё норм - COMMIT?
Или mysql сам следит за этим и сам знает, что подразумевать в конце - commit или rollback?
...
Рейтинг: 0 / 0
14.08.2014, 17:18:54
    #38720602
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в несколько таблиц и блокировки/транзакции
вот это всё хорошо будет работать в хранимой процедуре
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
start transaction;

insert into table ('fdk','fjdksfj',10,342);
set @a = LAST_INSERT_ID();

insert into table2('fjdks',32,@a);

insert into table3('fjdkfsdafasds',3322,@a);
......

commit;
...
Рейтинг: 0 / 0
14.08.2014, 17:23:44
    #38720607
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в несколько таблиц и блокировки/транзакции
автор?
Или mysql сам следит за этим и сам знает, что подразумевать в конце - commit или rollback?

не следит, писать самому.
...
Рейтинг: 0 / 0
15.08.2014, 09:59:55
    #38720952
iova1984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в несколько таблиц и блокировки/транзакции
Транзакции работают!

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
$query = array();

$query[0] = "set local autocommit=0;";
$query[1] = "start transaction;";
$query[2] = "insert into `AUTO` values(null, 'aaaaa');";
$query[3] = "set @a = LAST_INSERT_ID();";
$query[4] = "insert into `CAR` values(null, 'ccccc', @a, 1)";
$query[5] = "commit;";

// В цикле выполняем запросы по одному
for($i = 0; $i < count($query); $i++) {
	$db->Query($query[$i]);
              // Если число затронутых записей < 1 (запрос не получился) - делаем откат
	if($db->AffectedRows() < 1) {
		$db->Query("rollback;");
		break;
	}
}



Тут всё отлично. Единственное, что мне осталось - это перед ИНСЕРТ-ом в `CAR` (после query[3]) - вывести на php LAST_INSERT_ID, который мы в query[3] записали в @a.

Типа, должно получиться что-то вроде:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
for($i = 0; $i < count($query); $i++) {
	$db->Query($query[$i]);
              // Если число затронутых записей < 1 (запрос не получился) - делаем откат
	if($db->AffectedRows() < 1) {
		$db->Query("rollback;");
		break;
	}

              // ЗАПРОС $query[3] = "set @a = LAST_INSERT_ID();";  - ВЫПОЛНИЛСЯ УСПЕШНО!
              if($i == 3) echo "Вывести тут этот самый @a!"
}



То есть, сразу после успешного получений last_id для мускула и переде вставкой в CAR - мне нужно на php вывести этот самый last_id (@a).
...
Рейтинг: 0 / 0
15.08.2014, 10:38:18
    #38720974
iova1984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в несколько таблиц и блокировки/транзакции
Аа, всё, проблема решена так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
$query[0] = "set local autocommit=0;";
$query[1] = "start transaction;";
$query[2] = "insert into auto values(null, 'aaaaa');";
$query[3] = "insert into car values(null, 'ccccc', LAST_INSERT_ID(), 1)";
$query[4] = "commit;";

for($i = 0; $i < count($query); $i++) {
	$db->Query($query[$i]);
	if($i == 2 || $i == 3) {
		if($db->AffectedRows() != 1) {
			echo $query[$i]."fails!\n";
			$db->Query("rollback;");
			break;
		}
	}
	echo $query[$i]."ok\n";
	if($i == 2) echo $db->LastInsertId()."\n";
}



Отдельное спасибо alex564657498765453 за 2-й вариант!
...
Рейтинг: 0 / 0
15.08.2014, 13:24:15
    #38721206
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в несколько таблиц и блокировки/транзакции
iova1984
Код: sql
1.
2.
$query[0] = "set local autocommit=0;";
$query[1] = "start transaction;";

Выключать автокоммит нет смысла, если вы явно начинаете транзакцию.
А если его таки выключать, то имеет смысл выключить его один раз в начале скрипта, а потом не начинать каждую транзакцию отдельно, а только их коммитить.
...
Рейтинг: 0 / 0
15.08.2014, 13:27:56
    #38721212
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в несколько таблиц и блокировки/транзакции
Кстати, зачем пихать управление транзакциями в массив - не понятно. Почему сразу не вызвать эти команды? роллбэк после них все равно не нужен, даже если они выполнятся с ошибкой.

И проверять успешность по AffectedRows() как-то странно, обычно функции Query возвращают false в случае неудачи.
...
Рейтинг: 0 / 0
15.08.2014, 13:28:30
    #38721213
iova1984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в несколько таблиц и блокировки/транзакции
miksoftiova1984
Код: sql
1.
2.
$query[0] = "set local autocommit=0;";
$query[1] = "start transaction;";

Выключать автокоммит нет смысла, если вы явно начинаете транзакцию.
А если его таки выключать, то имеет смысл выключить его один раз в начале скрипта, а потом не начинать каждую транзакцию отдельно, а только их коммитить.

Ну у меня же куча файлов и фуннкций, который связаны между собой... А транзакция мне нужна лишь в 2 случаях - добавлении тачки и удалении тачки. Только эти в функции должна оперировать сразу с несколькими таблицами одним махом. Остальные 99% кода транзакции не используют, посему нет смысла объявлять начало транзакции глобально.
...
Рейтинг: 0 / 0
15.08.2014, 13:31:15
    #38721217
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в несколько таблиц и блокировки/транзакции
iova1984miksoftпропущено...
Выключать автокоммит нет смысла, если вы явно начинаете транзакцию.
А если его таки выключать, то имеет смысл выключить его один раз в начале скрипта, а потом не начинать каждую транзакцию отдельно, а только их коммитить.

Ну у меня же куча файлов и фуннкций, который связаны между собой... А транзакция мне нужна лишь в 2 случаях - добавлении тачки и удалении тачки. Только эти в функции должна оперировать сразу с несколькими таблицами одним махом. Остальные 99% кода транзакции не используют, посему нет смысла объявлять начало транзакции глобально.Так ваше set local autocommit=0 этому противоречит. В этой команде автокоммит выключается до конца работы MySQL-сессии или до явного включения обратно.
Т.е. любой update/insert/delete после этого блока кода неявно начнет транзакцию, но кто ее закончит?
...
Рейтинг: 0 / 0
15.08.2014, 13:33:01
    #38721221
iova1984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в несколько таблиц и блокировки/транзакции
miksoftКстати, зачем пихать управление транзакциями в массив - не понятно. Почему сразу не вызвать эти команды? роллбэк после них все равно не нужен, даже если они выполнятся с ошибкой.

И проверять успешность по AffectedRows() как-то странно, обычно функции Query возвращают false в случае неудачи.

1. Это верно - переделаю - в массиве будут лишь INSERT-ы (в моём псевдокоде - 2 инсерта - в `auto` и `car`).
2. Как так rollback не нужен? Надо же указать мускулу что если ошибка - делать откат. Иначе от сам COMMIT поставит и заинсертит лишь в 1 табличку. Я проверял.
3. А как мне проверять успешность выполнения каждого ИНСЕРТ-а??
...
Рейтинг: 0 / 0
15.08.2014, 13:36:34
    #38721225
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в несколько таблиц и блокировки/транзакции
iova19842. Как так rollback не нужен? Надо же указать мускулу что если ошибка - делать откат. Иначе от сам COMMIT поставит и заинсертит лишь в 1 табличку. Я проверял.я говорил про команды управления транзакциями, это не инсерт.

iova19843. А как мне проверять успешность выполнения каждого ИНСЕРТ-а??miksoftобычно функции Query возвращают false в случае неудачи.Дополнение - проверьте в доке по используемой функции $db->Query().
...
Рейтинг: 0 / 0
15.08.2014, 13:36:59
    #38721227
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в несколько таблиц и блокировки/транзакции
iova1984А как мне проверять успешность выполнения каждого ИНСЕРТ-а??
miksoftобычно функции Query возвращают false в случае неудачи.
...
Рейтинг: 0 / 0
15.08.2014, 15:10:20
    #38721335
iova1984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в несколько таблиц и блокировки/транзакции
miksoftТак ваше set local autocommit=0 этому противоречит. В этой команде автокоммит выключается до конца работы MySQL-сессии или до явного включения обратно.
Т.е. любой update/insert/delete после этого блока кода неявно начнет транзакцию, но кто ее закончит?

Ксати да, спасибо, обралил внимание. Как я понял, тогда уже если я явно указал "set local autocommit=0" - то после commit/rollback - следует написать "set local autocommit=1", ага?
...
Рейтинг: 0 / 0
15.08.2014, 15:12:28
    #38721337
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в несколько таблиц и блокировки/транзакции
iova1984miksoftТак ваше set local autocommit=0 этому противоречит. В этой команде автокоммит выключается до конца работы MySQL-сессии или до явного включения обратно.
Т.е. любой update/insert/delete после этого блока кода неявно начнет транзакцию, но кто ее закончит?

Ксати да, спасибо, обралил внимание. Как я понял, тогда уже если я явно указал "set local autocommit=0" - то после commit/rollback - следует написать "set local autocommit=1", ага?Да нет же!
miksoftВыключать автокоммит нет смысла, если вы явно начинаете транзакцию.
А если его таки выключать, то имеет смысл выключить его один раз в начале скрипта, а потом не начинать каждую транзакцию отдельно, а только их коммитить.Т.е. что-то одно - или выключаете автокоммит, или явно начинаете транзакции.
...
Рейтинг: 0 / 0
15.08.2014, 16:07:11
    #38721406
iova1984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в несколько таблиц и блокировки/транзакции
Вот мой окончательный псевдокод! set autocommit вообще нигде не писал:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
<?php

              include_once('mysqldb_class.php');
	include_once('socket.php');

	$db = db_connect();

	$query = array();
	$errors = 0;

	$db->Query("START TRANSACTION");

	$query[0] = "INSERT INTO `auto` VALUES(NULL, 'mercedes')";
	$query[1] = "INSERT INTO `car` VALUES(NULL, 'xxxxx', @last_id)";
	$query[2] = "INSERT INTO `opts` VALUES(NULL, @last_id)";

	for($i = 0; $i < count($query); $i++) {
		$db->Query($query[$i]);
                            // AffectedRows() возвращает "-1" если ошибка в INSERT/DELETE/UPDATE
		if($db->AffectedRows() == -1) {
                                          // Переключаем флаг ошибок с 0 на 1 и уматываем из цикла, сделав rollback - что дальше, нам не интересно!
			$errors = 1;
			$db->Query("ROLLBACK");
			break;
		}
                            // Самый 1-й ИНСЕРТ прошёл успешно - мы тут же получаем LAST_ID для php и заодно устанавливаем его для последующих запросов mysql
		if($i == 0) {
			$last_id = $db->LastInsertId();
                                          // Ставим в mysql @last_id - он будет использаваться в запросах $query[1] и $query[2] в качестве FOREIGN KEY
			$db->Query("SET @last_id=$last_id");
		}
                            // Последний запрос выполнен - вызываем php ф-ю aaa(), котарая загружает фотки тачки на сервер. В качестве параметра
                            // она принимает тот самый $last_id, полученный после самого 1-го запроса - это id добавляемой тачки
		elseif($i == 2) {
                                          // Блин, фотка нифига не загрузилась на сервер - тогда нафиг нам вообще ничего добавлять в БД - делаем rollback и сворачиваем удочки
			if(aaa($last_id) == -1) {
				$errors = 1;
				$db->Query("ROLLBACK");
				break;
			}
		}
	}

              // Флаг ошибок остался нетронутым - значит, ошибок не было - всё круто, ставим COMMIT
	if($errors == 0) $db->Query("COMMIT");

	db_disconnect();


	function aaa($id) {
		return(0);
	}

?>
...
Рейтинг: 0 / 0
15.08.2014, 16:09:25
    #38721411
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в несколько таблиц и блокировки/транзакции
С точки зрения MySQL - вроде правильно. С точки зрения PHP - кошмар.
...
Рейтинг: 0 / 0
15.08.2014, 16:10:41
    #38721414
iova1984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в несколько таблиц и блокировки/транзакции
miksoftС точки зрения MySQL - вроде правильно. С точки зрения PHP - кошмар.
С чего бы это? Пробовал тестово - всё отлично пашет!
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / INSERT в несколько таблиц и блокировки/транзакции / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]