簡體   English   中英

如何遍歷返回的SQL結果-nextRecord()

[英]How to loop through returned SQL results - nextRecord()

我有一個存儲過程,可以從MSSQL數據庫返回多個結果集。 我遇到的問題是遍歷每個結果集。 Yii似乎沒有前進到下一個結果集以遍歷行。 這是一個例子:

結果1:

TOTAL
-----
999

結果2:

ID |NAME
---|----
0  | Jon
1  | Bob
2  | Sarah
3  | Pete

這是我在Yii進行這項工作的嘗試。

//create the call to stored proc

$command=parent::$db->createCommand("exec sp_showUsers");    

//run the query      

$dataReader = $command->query();

//For the current object assign the row to a variable

while (($row = $dataReader->read()) !== false){

      //if the row has a total column

      if(isset($row['total'])){
           $total = $row['total'];
      }
 }

//Test if there is another result 

$usersExist = $dataReader->nextResult();

//$dataReader->next(); - REMOVED AS NOT NEEDED

if($usersExist){
     $userTable = array();
     $i = 0;
     while (($userRow = $dataReader->read())!== false){
            //add each row to a temporary array

            $userTable[$i] = $userRow['id'];
            $i++;
     }
 }

 ...

即使已調用->next()方法,這似乎也無法遍歷第二個結果集? 任何幫助將不勝感激! 謝謝。

Ps存儲過程確實起作用,我可以使用普通的PHP和sqlsrv_next_result()方法遍歷結果。

在代碼中,為什么

$dataReader->nextResult()將返回CDbDataReader對象。

因此,您正在使用$dataReader->next(); 這只會移動第一個結果的指針。 您必須移動nextResult()調用返回的指針。

我認為,

$dataReader=$dataReader->next();

將解決問題

我找到了答案。 我們將參數綁定到存儲過程的方式弄亂了我們的結果。 我們不需要$ dataReader-> next(); 完全沒有 所以上面的代碼都可以正常工作。 我希望這對使用Yii使用SQL Server存儲過程的人有所幫助。 :)以防萬一有人需要存儲過程調用示例:

$command=parent::$db->createCommand("exec sp_showUsers :pageNumber, :pageSize, :sortOrder, :viewAll");

$command->bindParam(":pageSize", $pageSize, PDO::PARAM_INT); 
$command->bindParam(":pageNumber", $pageNumber, PDO::PARAM_INT); 
$command->bindParam(":sortOrder", $sortOrder, PDO::PARAM_STR); 
$command->bindParam(":viewAll", $viewAll, PDO::PARAM_BOOL); 

$dataReader = $command->query();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM