powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / одновременное обновление записи в бд
5 сообщений из 5, страница 1 из 1
одновременное обновление записи в бд
    #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
одновременное обновление записи в бд
    #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
одновременное обновление записи в бд
    #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
одновременное обновление записи в бд
    #38801722
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453update table set count=count-1Можно и так, но до селекта. И последняя строка моего предыдущего поста все равно остается в силе.
...
Рейтинг: 0 / 0
одновременное обновление записи в бд
    #38801762
kenterberiiskii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо , попробую)
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / одновременное обновление записи в бд
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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