【问题标题】:How to determine when multiple SQL queries are finished using PHP如何使用 PHP 确定多个 SQL 查询何时完成
【发布时间】:2013-11-07 16:09:30
【问题描述】:

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

【问题讨论】:

    标签: php sql database odbc 4d-database


    【解决方案1】:

    该 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-24
      • 1970-01-01
      • 2017-09-02
      • 2017-07-31
      • 1970-01-01
      相关资源
      最近更新 更多