从php编码器调用存储过程



查找了一个星期,但没有找到可以用来执行存储过程的内容。场景:

我已经复制了SQL Server 2014管理在分析器窗口上运行的代码。

我打开SQL Studio和HeidiSQL并运行查询,它运行正常并返回我预期的结果。

当我试图粘贴和修改此内容以获得与SQL客户端相同的结果时,它没有像在SQL客户端中那样运行。我怎样才能做到这一点呢?

eg:在我的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数据库的编码器: 在模型:

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);

它工作!

来源,帮助这么多:发出执行存储过程从PHP到Microsoft SQL SERVER回复用户@Ulises Burlando

我是这样解决的。

我正在使用PDO驱动程序。

simple_query方法返回PDOStatement对象和一个重要点SET 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;
    }
}
function () {
    $query = $this->db->query("EXEC USP_RoughBlockStockRegister'08/23/2017','08/23/2017',1,1");
    return $query->result();
}

最新更新