2011-12-22 3 views
0

Если я использую большую функцию, которая будет обновлять данные в MySQL, а затем выполнить header("Location: somepage"), будет ли PHP ждать, прежде чем все эти запросы обновления будут выполнены, а затем перенаправлены или мне придется это учитывать?Перенаправление Php с заголовком()

ответ

4

PHP-код выполнен в предикативном последовательном шаблоне, сверху вниз.

Если вы запустите несколько запросов к базе данных, то сервер базы данных будет обрабатывать их, поток PHP не обрабатывает само запись (просто передает запрос).

Таблицы MyISAM заблокированы для записи, и я уверен, что запросы UPDATE: atomic (что означает, что они либо все, либо не происходят - они не оставляют вещи наполовину законченными).

Кроме того, слегка касательный, не забудьте указать exit после отправки заголовка Location. Пользовательские агенты могут игнорировать заголовок Location.

+0

Что делать, если это move_uploaded_file() перед заголовком()? Будет ли php ждать загрузки перед перенаправлением? – user1091856

+0

@ user1091856: Это должно перевести на некоторые системные вызовы, которые будут вызываться до того, как заголовок будет отправлен обратно в браузер (что не имеет отношения к перемещению файла на сервере). – alex

+1

Да. Точнее, загрузка будет завершена до того, как PHP-код даже выполнится. –

4

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

1

Из PHP документации

Для других типов операторов SQL, INSERT, UPDATE, DELETE, DROP и т.д., mysql_query() возвращает значение TRUE в случае успешного завершения или FALSE в случае ошибки.

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

Смежные вопросы