2011-12-22 78 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的成功上错误。

然后...如果它返回成功或失败,它必须等到更新完成。