从php codeigniter调用存储过程

从php codeigniter调用存储过程,php,sql-server,sql-server-2008,codeigniter,stored-procedures,Php,Sql Server,Sql Server 2008,Codeigniter,Stored Procedures,查找了一周,没有找到可用于执行存储过程的内容。 情景: 我已在探查器窗口中复制了SQL Server 2014 management上运行的代码 我打开了sqlstudio和HeidiSQL并运行查询,它运行正常并返回预期结果 当我尝试粘贴和修改此内容以获得与在SQL客户机上相同的结果时,它的运行方式与在SQL客户机上的运行方式不同。 我怎样才能做到这一点 例如:在我的SQL中,我有128个变量,我必须声明它们才能运行存储过程,但更简单的是,我只发布一个变量,记住sintaxe与一个或128个变

查找了一周,没有找到可用于执行存储过程的内容。 情景:

我已在探查器窗口中复制了SQL Server 2014 management上运行的代码

我打开了sqlstudio和HeidiSQL并运行查询,它运行正常并返回预期结果

当我尝试粘贴和修改此内容以获得与在SQL客户机上相同的结果时,它的运行方式与在SQL客户机上的运行方式不同。 我怎样才能做到这一点

例如:在我的SQL中,我有128个变量,我必须声明它们才能运行存储过程,但更简单的是,我只发布一个变量,记住sintaxe与一个或128个变量相同,对吗

declare @var01 varchar(1000) set @var01='.$var01.'

EXEC
stored_procedure_y
@var01 output

SELECT
@var01 AS any_value
我尝试了许多方法来执行SQL命令,但都没有成功。 我尝试运行的一些示例:

  • 最后

    $declare_vars = 'declare @var01 varchar(1000) set @var01='.$var01.';
    $exec_sp = 'EXEC operacao_sitef @var01 output;
    $select_retorno = 'SELECT @var01 AS any_value;
    
    $queryDeclare = $this->db->query($declare_vars);
    
    $queryExec = $this->db->query($exec_sp);
        $queryRetorno = $this->db->query($select_retorno);
    
        return $queryRetorno;
    
    不工作

  • 其他

    $query = $this->db->query('
    declare @var01 varchar(1000) set @var01='.$var01.'
    EXEC
    operacao_sitef
    @var01 output
    SELECT
    @var01 AS any_value
     ');
     return $query;
    
也不管用。
任何帮助都将不胜感激。我是SP的新手,不知道如何使用codeigniter调用此函数并收集结果以完成操作。

很高兴地说,我将继续我的工作

这是解决我问题的帖子。 记住我在php和mssql数据库上使用codeigniter:

在模型中:

public function execute_sp($var1 = NULL,$var2 = NULL, $var3 = NULL, $var4 = NULL, $var5 = NULL, $var6 = NULL, $var7 = NULL, $var8 = NULL, $var9 = NULL, $var10 = NULL){
$sp = "stored_procedure_name ?,?,?,?,?,?,?,?,?,? "; //No exec or call needed

//No @ needed.  Codeigniter gets it right either way
$params = array(
'PARAM_1' => NULL,
'PARAM_2' => NULL,
'PARAM_3' => NULL,
'PARAM_4' => NULL,
'PARAM_5' => NULL,
'PARAM_6' => NULL,
'PARAM_7' => NULL,
'PARAM_8' => NULL,
'PARAM_9' => NULL,
'PARAM_10' =>NULL);

$result = $this->db->query($sp,$params);
在控制器中:

$var1 = 'value';
$var2 = 'value';
$var3 = 'value';
$var4 = 'value';
$var5 = 'value';
$var6 = 'value';
$var7 = 'value';
$var8 = 'value';
$var9 = 'value';
$var10 = 'value';

$this->model->sp($var1, $var2, $var3, $var4, $var5, $var6, $var7, $var8, $var9, $var10);
它起作用了

帮助很大的来源:用户@Ulises Burlando的回复

我就是这样解决的

function () {
    $query = $this->db->query("EXEC USP_RoughBlockStockRegister'08/23/2017','08/23/2017',1,1");
    return $query->result();
}
我正在使用PDO驱动程序

simple_query方法返回PDOStatement对象和一个重要点集合NOCOUNT ON

class Pump_Model extends CI_Model
{
    public function getPumpStatisticSpById($pumpId)
    {
        $result = $this->db->simple_query("SET NOCOUNT ON 
                            DECLARE @return_value int
                            EXEC    @return_value = [dbo].[spPumpStatistics]
                                    @PumpID = $pumpId")->fetch(PDO::FETCH_OBJ);
        return $result;
    }

}

很高兴知道。可能会帮助PDO患者。在我的例子中,我不能使用PDO,因为系统使用的是MSSQL驱动程序,而EXEC不是使用AmazonRDS的选项