Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / одновременное обновление записи в бд / 5 сообщений из 5, страница 1 из 1
11.11.2014, 10:25:55
    #38801642
kenterberiiskii
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
одновременное обновление записи в бд
Добрый день!
попросили сделать форму на работе для записи некоторого действия(заказ подарков). Пишу в csv.
При этом одновременно с записью в файл мне надо уменьшать количество подарков на один.
Я не программер поэтому сделал вот что.

<?php
$csvFile = 'new.csv';
$csvData = "{$_POST['Name']};{$_POST['Firm']};{$_POST['Contact_face']};{$_POST['Position']};{$_POST['Phone']};{$_POST['select1']};{$_POST['select2']};{$_POST['mail']}\n";
file_put_contents( $csvFile, $csvData, FILE_APPEND );
$my_select = "{$_POST['select2']}";
$sql = mysql_query("SELECT contentid, value, pagetitle, modx_site_content.id FROM modx_site_tmplvar_contentvalues, modx_site_content WHERE modx_site_content.id=modx_site_tmplvar_contentvalues.contentid AND pagetitle = '$my_select'");
while ($row = mysql_fetch_object($sql)) {
$value = $row -> value;
$contentid = $row -> contentid;
$pagetitle = $row -> pagetitle;
echo "Заявка на ", $pagetitle, " оформлена", "<br>";
$new_value = $value - 1;
//echo "Осталось ", $new_value;
$update = ("UPDATE modx_site_tmplvar_contentvalues, modx_site_content SET value = '$new_value' WHERE modx_site_content.id=modx_site_tmplvar_contentvalues.contentid AND pagetitle = '$my_select'");
$dummy = mysql_query($update);
}
?>
соответсна дергаю значение параметра , вывожу нужные данные и обновляю значение уменьшая его на единицу.

Если форму отправляет несколько человек одновременно, то записи в csv пишутся все но количество уменьшается только на единицу. Не знаю куда копать..учитался уже . Есть подозрение что мускул видит все одной транзакцией, но не понятно как это лечить. и так ли это вообще.

В любом случае благодарен любой помощи и подсказке..я уже иссяк.
...
Рейтинг: 0 / 0
11.11.2014, 10:48:05
    #38801692
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
одновременное обновление записи в бд
kenterberiiskiiSET value = '$new_value'Смотрите как получается:
1) Допустим было value=100
2) Первая сессия читает число 100
3) Вторая сессия читает число 100
4) Первая сессия вычитает 1, получает 99
5) Вторая сессия вычитает 1, получает 99
6) Первая сессия пишет 99
7) Вторая сессия пишет 99

Используйте SELECT ... FOR UPDATE, чтобы в пункте 3 вторая сессия ждала снятия блокировки.
Не забудьте выключить в MySQL автокоммит либо явно начать транзакцию. Блокировка записи снимается при коммите или откате транзакции.
...
Рейтинг: 0 / 0
11.11.2014, 10:57:39
    #38801712
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
одновременное обновление записи в бд
miksoftkenterberiiskiiSET value = '$new_value'Смотрите как получается:
1) Допустим было value=100
2) Первая сессия читает число 100
3) Вторая сессия читает число 100
4) Первая сессия вычитает 1, получает 99
5) Вторая сессия вычитает 1, получает 99
6) Первая сессия пишет 99
7) Вторая сессия пишет 99

Используйте SELECT ... FOR UPDATE, чтобы в пункте 3 вторая сессия ждала снятия блокировки.
Не забудьте выключить в MySQL автокоммит либо явно начать транзакцию. Блокировка записи снимается при коммите или откате транзакции.

не надо слушать миксофта :) извини братан :)

update table set count=count-1 where count > 1

и смотреть на результат работы affected_rows
...
Рейтинг: 0 / 0
11.11.2014, 11:01:43
    #38801722
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
одновременное обновление записи в бд
alex564657498765453update table set count=count-1Можно и так, но до селекта. И последняя строка моего предыдущего поста все равно остается в силе.
...
Рейтинг: 0 / 0
11.11.2014, 11:27:51
    #38801762
kenterberiiskii
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
одновременное обновление записи в бд
Спасибо , попробую)
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / одновременное обновление записи в бд / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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