我有一个Web应用程序,它基本上是一个页面,其中一个表单分解为选项卡,每个页面包含来自不同数据库表的数据。表单操作指向save.php脚本,该脚本获取表单数据并将其保存到数据库中。
save.php脚本的结构使其由多个SQL INSERT / UPDATE语句组成,每个语句对应一个数据库表。它是这样做的,因为某些表单选项卡是根据用户首选项等隐藏的,因此这些语句的可变数量实际上会随时运行。
有什么方法可以确定所有SQL查询何时完成执行,以便我可以将用户重定向到另一个页面?
作为一个简单的例子,save.php脚本由几个代码块组成,基本上如下所示:
$updQuery = "UPDATE exampletable SET row=1 WHERE x=y";
try {
$updResult = odbc_exec($connect,$updQuery);
}
catch (RuntimeException $e) {
ExceptionHandlingStuff();
}
通常对于重定向,我只是使用如下的元刷新:
<meta http-equiv="refresh" content="10; URL=homepage.php">
我可以将它设置为10秒的长时间延迟,以“合理地”确保所有SQL查询在刷新开始时都会执行但这看起来像是一个可怕的黑客,它不提供保证并导致不必要的延迟用户,因为在10秒延迟结束之前很久就会完成查询。
检测页面上的所有SQL INSERT / UPDATE语句何时完成执行的最佳方法是什么,以便我可以立即重定向用户?
作为参考,我使用PHP和ODBC连接到4D SQL ANSI-92数据库。
答案 0 :(得分:2)
该exec命令不与其他查询并行运行。当您捕获异常或落入catch块之后的下一行代码时,此更新已完成。所以,鉴于这里的信息有限,我会说在save.php的底部重定向,如:
$statusCode = ($statusCode ?: 200);
$statusCodeMessage = ($statusCodeMessage ?: '');
$forwardingUrl = ($forwardingUrl ?: 'http://www.google.com/');
header(sprintf("HTTP/1.1 %d %s", $statusCode, $statusCodeMessage));
header('Location: ' . $forwardingUrl);