2011-12-22 76 views
0

如果我使用一個大的函數來更新MySQL上的數據,然後執行header("Location: somepage"),PHP會在所有這些更新查詢完成之前等待,然後重定向還是必須對此進行解釋?Php重定向與標題()

回答

4

PHP代碼以可預測的順序模式執行,自上而下。

如果您運行一些數據庫查詢,數據庫服務器將處理它們,PHP的線程不處理寫入本身(只是傳遞查詢)。

MyISAM表被鎖定寫,我很確定UPDATE查詢是atomic(這意味着他們要麼全部發生,要麼不發生 - 他們不會把事情完成一半)。

另外,稍微切向,發送Location標題後不要忘記exit。用戶代理可以忽略Location標題。

+0

如果它是header_()之前的move_uploaded_file()會怎麼樣? PHP會在重定向之前等待上傳嗎? – user1091856 2011-12-22 04:35:41

+0

@ user1091856:這應該轉化爲一些系統調用,這些系統調用在標題被髮送回瀏覽器之前被調用(這與在服務器上移動文件無關)。 – alex 2011-12-22 04:36:58

+1

是的。更確切地說,在PHP代碼執行之前,上傳就已經完成了。 – 2011-12-22 04:37:52

4

是的,PHP會按順序執行每個命令,只有在更新查詢報告成功後纔會到達重定向語句。

1

從PHP文檔

對於其它類型的SQL語句,插入,更新,刪除,DROP,等, 的mysql_query()返回TRUE或FALSE的成功上錯誤。

然後...如果它返回成功或失敗,它必須等到更新完成。