![]() |
|
Модераторы: skyboy |
![]()
|
|
| tigger |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 456 Регистрация: 30.4.2005 Репутация: нет Всего: 4 |
Есть такая конструкция
где $query_upd и $query_update_i запросы на обновление данных. Вот эта приведенная мной конструкция корректна или это вообще по другому делается. Таблицы InnoBD. В каких случаях нужны транзакции на запросах UPDATE и INSERT? Поделитесь опытом. Главное условие чтобы не кончить базу. |
|||
|
||||
| vasac |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1060 Регистрация: 4.5.2006 Репутация: нет Всего: 36 |
||||
|
||||
| mikla |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 133 Регистрация: 3.12.2006 Где: Витебск Репутация: нет Всего: нет |
я думаю, что коммит нада делать в самом конце.
--------------------
|
|||
|
||||
| tigger |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 456 Регистрация: 30.4.2005 Репутация: нет Всего: 4 |
mysql_query('START TRANSACTION');
mysql_query($query_upd); mysql_query($query_update_i); mysql_query('COMMIT'); вот нашел что так делать надо, а как же обработать если запросы Update были не успешными? |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: нет Всего: 70 |
Соедини запросы вместе и вызови mysql_query один раз. Соотвественно при какой-либо ошибке MySQL сам отменит транзакцию.
|
|||
|
||||
| tigger |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 456 Регистрация: 30.4.2005 Репутация: нет Всего: 4 |
как их соединяют?
|
|||
|
||||
| vasac |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1060 Регистрация: 4.5.2006 Репутация: нет Всего: 36 |
mysql_query обрабатывает только один запрос.
http://ru2.php.net/manual/ru/function.mysqli-multi-query.php |
|||
|
||||
| Kaiden |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 26.11.2007 Репутация: нет Всего: нет |
В приницпе, вы можете проверять с помощью функции mysql_errno результат выполнения каждого запроса. Если хотя бы один раз mysql_errno вернула ненулевое значение ( т.е. была ошибка ), в конце вместо COMMIT вызывать ROLLBACK. А лучше, конечно, обходиться одним запросом там, где это возможно. Это сообщение отредактировал(а) Kaiden - 10.12.2007, 23:28 |
|||
|
||||
| FCCStepan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 31.10.2007 Репутация: нет Всего: нет |
2tiger
я так понимаю mysql_query($query_upd.";".$query_update_i); но имхо транзакцию он сам отменять не будет, если один из запросов будет невыполнен. |
|||
|
||||
| ST_Falcon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 14.11.2003 Где: Львов Репутация: нет Всего: 1 |
tigger,
имхо отличная конструкция. использую когда нужно выполнить группу взаимосвязанных запросов (например перевод средств от одного участника системы к другому) |
|||
|
||||
| vi_k |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 29.12.2007 Репутация: нет Всего: нет |
Функция mysql_query() возвращает результат своего выполнения, его и надо проверять:
Пример:
Зачем всё остальное: mysql_errno() и исключения?
Нельзя. Только один запрос! |
||||||
|
|||||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MySQL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |