sqlsrv驱动 取得存储过程返回数据
$connection = array(
'UID' => 'username',
'PWD' => 'password',
'Database' => 'db_name',
'ConnectionPooling' => 1,
"CharacterSet" => 'utf-8',
'ReturnDatesAsStrings' => 1
);
$conn = sqlsrv_connect("127.0.0.1", $connection);
$stmt = sqlsrv_query($conn, "exec 存储过程名称 @canshu=100");
if ($stmt === false) {
echo "Error in executing statement 3.\n";
die(print_r(sqlsrv_errors(), true));
}
//存储过程中每一个select都会产生一个结果集,取某个结果集就需要从第一个移动到需要的那个结果集
//如果结果集为空就移到下一个
while (sqlsrv_has_rows($stmt) !== TRUE) {
sqlsrv_next_result($stmt);
}
$result_object = array();
while ($row = sqlsrv_fetch_object($stmt)) {
$result_object[] = $row;
}
sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
return $result_object;
使用CI的sqlsrv是无法运行有使用了游标的存储过程的,在sqlsrv的驱动中参数已经默认
return sqlsrv_query($this->conn_id, $sql, null, array(
'Scrollable' => SQLSRV_CURSOR_STATIC,//这个参数已经被写死了,具体含义可以参考sqlsrv的手册
'SendStreamParamsAtExec' => true
));
while (sqlsrv_has_rows($stmt) !== TRUE) {
sqlsrv_next_result($stmt);
if (!is_integer(sqlsrv_rows_affected($stmt))) {
break;
}
}
在调用的存储过程返回数据为空时,会造成while无限循环,经调试发现,sqlsrv_rows_affected显示的应该是存储过程中的多次sql语句影响的行数(出现有0行)。所以我判断当行数不再有时,停止循环。
请各位大大指出错误之处。。。
页:
[1]