繁体   English   中英

sqlsrv_execute 不返回任何内容

[英]sqlsrv_execute doesn't return anything

我正在使用 PHP 的 SQL 服务器驱动程序来访问 SQLexec 服务器数据库,我在使用sqlsrv_prpare函数更新一些数据时sqlsrv_execute问题。

我正在运行两个查询:

  • 在第一个查询中,我正在检索一些二进制数据(在 SQL Server Management Studio 中,此查询大约需要 15 分钟才能完成);
  • 然后,对于第一个查询执行返回的每一行,我试图更新数据库上的一些数据。

这是我的代码的样子:

$query1 = "SELECT tgt.id, src.file, src.field1 from [Table1] tgt inner join [Table2] src on tgt.id = src.id order by tgt.id";

$query2 = "UPDATE [Table1] SET field1 = ? WHERE id = ?";

$getFiles = sqlsrv_query($con, $query1); //$con is the connection with the database, received by parameter

while($row = sqlsrv_fetch_array($getFiles, SQLSRV_FETCH_BOTH)) {
  /* Some code here */
  $file = $row[1];
  $value = $row[2];
  try {
       if(!is_null($file)) {
               $stmt = sqlsrv_prepare($con, $query2, array(&$value, &$row[0]));
               if( $stmt === false ) {
                  die( print_r( sqlsrv_errors(), true));
               }
               sqlsrv_execute( $stmt );
       }
  } catch (Exception $e) {
            error_log("\nError: " . $e->getMessage());
    }
} //end while
    sqlsrv_free_stmt($getFiles);  
    sqlsrv_close($con);

问题是循环内的代码对第一行运行良好,但在第二行没有执行更新查询。 sqlsrv_prepare返回值 1,但sqlsrv_execute不返回任何内容。

我认为问题可能与第一次查询执行时间有关,但我不知道如何检查,考虑到没有生成错误日志,脚本只是永远执行。

编辑:实际上,这个例子被简化了。 将在 tgt 表上更新的值是使用 src 表中的一些数据和其他应用程序数据计算的。 这就是我使用循环的原因,对于 query1 返回的每一行,都会计算并在 query2 上使用特定值。 我已经检查过这些值是否正确计算,这就是为什么我认为最好简化示例。

为了解决这个问题,我必须单独运行查询:

  • 首先,我运行了 query1,计算了更新 tgt 表所需的数据并将它们存储在一个数组中;
  • 然后,使用存储在数组中的数据,我运行了 query2。

无需进行其他更改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM