如何确定何时使用PHP完成多个SQL查询

时间:2013-11-07 16:09:31

标签: php sql database odbc 4d-database

我有一个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数据库。

1 个答案:

答案 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);