Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Вопрос по одновременному запросу к базе

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
DrBAKS
Отправлено: 14 Июля, 2015 - 10:07:43
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Июль 2015  


Помог: 0 раз(а)




Допустим есть база данных, и есть скрипт в котором пользователи после регистрация обращаются к базе и исходя из уже имеющихся данных добавляют туда свои.Я в теории пхп не очень.И меня всегда мучает вопрос, что если два пользователя почти одновременно нажмут на условную кнопку и запустят скрипт, как он будет действовать?по очереди или одновременно?Т.е Вариант № 1: они оба получат одинаковые последние данные из базы и на основе их добавят свои?Вариант № 2: сначала один пользователь получит последние данные и на основе их добавит свои, а потом второй обратиться к базе получит последние данные(уже с данными первого) и на основе их добавит свои? Для логики проекта нужно что бы было как во втором варианте Улыбка
 
 Top
lastdays
Отправлено: 14 Июля, 2015 - 10:31:04
Post Id



Частый гость


Покинул форум
Сообщений всего: 221
Дата рег-ции: Март 2013  


Помог: 7 раз(а)




autoincrement же, не страшно что одновременно.
Встречал в некоторых проектах : блочили таблицу на время выполнения каких-либо операцийУлыбка
 
 Top
LIME
Отправлено: 14 Июля, 2015 - 11:42:49
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




lastdays не все так просто
Возможно речь об апдейте а не инсерте
DrBAKS конкретизируй
А пока могу только намекнуть на волшебное слово "транзакция"
(Добавление)
Но и оно не спасет от того что оба прочитали и потом долго думали как изменить
Короче нужна конкретика
 
 Top
Мелкий Супермодератор
Отправлено: 14 Июля, 2015 - 14:09:06
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




LIME пишет:
Но и оно не спасет от того что оба прочитали и потом долго думали как изменить

Поможет, если захапать блокировку подходящую.

DrBAKS пишет:
запустят скрипт, как он будет действовать?по очереди или одновременно?

Скрипты будут работать параллельно до тех пор, пока не подерутся за какой-нибудь разделяемый ресурс.
Возможны оба описанных вами сценария поведения, а так же ещё несколько других. Смотря что там происходит в этих скриптах.


-----
PostgreSQL DBA
 
 Top
DrBAKS
Отправлено: 15 Июля, 2015 - 22:05:57
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Июль 2015  


Помог: 0 раз(а)




Прочитал про транзакцию, вроде то что мне нужно. Но так и не понял как её писать в запросах в php скриптах.Воз можно что то типа:
1. Начало транзакции
2. селект
3. селект
4. инсерт
5. апдейт
6. конец транзакции

Это все отдельные запросы. И если можно приведите пример запроса, а то я так и не на гуглил нормальный пример.
 
 Top
Мелкий Супермодератор
Отправлено: 15 Июля, 2015 - 22:23:47
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




http://php.net/manual/en/pdo.beg...ntransaction.php
http://php.net/manual/en/pdo.commit.php
Между ними требуемая логика. В случае ошибки PDO::rollBack

И есть несколько логичных, но не всегда очевидных граблей с блокировками, кто кого ждать будет, а кто будет исполняться параллельно.


-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB