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