Вызов хранимой процедуры из php codeigniter

1

Поиск в течение одной недели и не нашел контент, который я могу использовать для выполнения хранимой процедуры. Сценарий:

Я скопировал код, который запускается при управлении SQL Server 2014 в окне Profiler.

Я открыл SQL Studio и HeidiSQL и запустил запросы, и он работает нормально и возвращает ожидаемый результат.

Когда я попытался вставить и изменить этот контент, чтобы получить тот же результат, что и у SQL-клиентов, он не запускался, как в SQL-клиентах. Как я могу это достичь?

например: В моем SQL у меня есть 128 vars, которые я должен объявить для запуска хранимой процедуры, но чтобы быть более простым, я опубликую только один var, имея в виду, что sintaxe одинаково для одного или 128 vars правильно?

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 и собрать результаты для завершения операции.

Теги:
sql-server
stored-procedures
codeigniter
sql-server-2008

3 ответа

2
Лучший ответ

Рад сказать, что я сохраню свою работу.

Здесь идет сообщение, которое решило мою проблему. Помня, что я работаю с 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 на ответ SQL SERVER от пользователя @Ulises Burlando

2

Я так решил.

Я использую драйвер 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;
    }

}
  • 1
    Хорошо знать. Может помочь людям в случаях PDO. В моем случае я не мог использовать PDO, потому что система использовала драйвер MSSQL, а EXEC не был опцией использования Amazon RDS.
  • 0
    Это работает. Спасибо..!
0
function () {
    $query = $this->db->query("EXEC USP_RoughBlockStockRegister'08/23/2017','08/23/2017',1,1");
    return $query->result();
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню