[英]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.