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

[辅助方法 Helper] mssql2008存储过程调用方法

[复制链接]
发表于 2014-12-9 14:20:55 | 显示全部楼层 |阅读模式
用ci很久了,ci调用mssql2008的存储过程一直不是那么顺畅,也懒得去读ci的手册,干脆自己写个函数搞掂mssql2008的存储过程,
函数如下,都有注释,给位看官请多多指教。

PHP复制代码
 
/*
执行mssql存储过程
$procedure 存储过程名字
$params存储过程参数,demo如下:
    $userid = 2404;//传入的值,指定为SQLSRV_PARAM_IN,不能用引号
    $result = 0;//输出的值,指定为SQLSRV_PARAM_OUT,不能用引号
    $params = array(
        array(&$userid, SQLSRV_PARAM_IN),
        array(&$result, SQLSRV_PARAM_OUT)
    );
$return=0表示需要output参数接收返回值
$return=1表示需要存储过程通过select返回查询信息
*/

function mssql_procedure($procedure, $params, $return=0){
    $return = intval($return);
    $procedure = trim($procedure);
    if($procedure == ''){
        return false;
    }
    $CI =& get_instance();
    $connectionInfo = array("UID"=>$CI->db->username, "PWD"=>$CI->db->password, "Database"=>$CI->db->database);
    $conn = sqlsrv_connect($CI->db->hostname, $connectionInfo);
    if( $conn == false){
        echo "连接失败!";
        die( print_r( sqlsrv_errors(), true));
    }
    $sql = 'exec '.$procedure;
    foreach($params as $v){
        $sql .= ' ?,';
    }
    $sql = substr($sql, 0 ,-1);
    $query= sqlsrv_query($conn,$sql, $params) or die(sqlsrv_errors());
    if($return > 0){
        $re = array();
        while($row = sqlsrv_fetch_array($query,SQLSRV_FETCH_ASSOC)){
            $re[] = $row;
        }
        return $re;
    } else {
        return $params;
    }
}
 
复制代码


 楼主| 发表于 2014-12-9 19:25:14 | 显示全部楼层
发现存储过程里面有insert或者update语句就不行了。
发表于 2017-4-28 12:51:24 | 显示全部楼层
Array to string conversion 提示这个是什么原因呢

本版积分规则