簡體   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