用户
 找回密码
 入住 CI 中国社区
搜索
查看: 4763|回复: 1
收起左侧

[其它 Other] sqlsrv驱动 取得存储过程返回数据

[复制链接]
发表于 2012-6-19 21:53:29 | 显示全部楼层 |阅读模式
PHP复制代码
 
$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的驱动中参数已经默认

PHP复制代码
 
return sqlsrv_query($this->conn_id, $sql, null, array(
                        'Scrollable'                            => SQLSRV_CURSOR_STATIC,//这个参数已经被写死了,具体含义可以参考sqlsrv的手册
                        'SendStreamParamsAtExec'        => true
                ));
 
复制代码

评分

参与人数 1威望 +5 收起 理由
Hex + 5 很给力!

查看全部评分

发表于 2013-10-24 12:10:57 | 显示全部楼层
PHP复制代码
 
        while (sqlsrv_has_rows($stmt) !== TRUE) {
            sqlsrv_next_result($stmt);
            if (!is_integer(sqlsrv_rows_affected($stmt))) {
                break;
            }
        }
 
复制代码


在调用的存储过程返回数据为空时,会造成while无限循环,经调试发现,sqlsrv_rows_affected显示的应该是存储过程中的多次sql语句影响的行数(出现有0行)。所以我判断当行数不再有时,停止循环。

请各位大大指出错误之处。。。

本版积分规则