1

我有一个 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 查询都已执行,但这似乎是一个可怕的 hack,它无法提供任何保证并导致用户不必要的延迟,因为查询几乎总是在 10 秒延迟结束之前很久就完成了。

检测页面上的所有 SQL INSERT/UPDATE 语句何时完成执行以便之后立即重定向用户的最佳方法是什么?

作为参考,我使用 PHP 和 ODBC 连接到 4D SQL ANSI-92 数据库。

4

1 回答 1

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);
于 2013-11-07T16:24:44.130 回答