无所谓了吗 发表于 2014-12-9 14:20:55

mssql2008存储过程调用方法

用ci很久了,ci调用mssql2008的存储过程一直不是那么顺畅,也懒得去读ci的手册,干脆自己写个函数搞掂mssql2008的存储过程,
函数如下,都有注释,给位看官请多多指教。


/*
执行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语句就不行了。

chenwenzi 发表于 2017-4-28 12:51:24

Array to string conversion 提示这个是什么原因呢
页: [1]
查看完整版本: mssql2008存储过程调用方法