Вызов хранимой процедуры из класса Active Record CodeIgniter - PullRequest
2 голосов
/ 28 января 2011

В моем приложении CI для запроса к базе данных mssql. Я хочу выполнить stored procedure из active record. Но я не могу получить какую-либо основательную документацию.

Кто-нибудь имеет опыт вызова хранимых процедур с CodeIgniter и / или Active Record и передачи параметров?

Спасибо

Билли

Ответы [ 6 ]

14 голосов
/ 11 марта 2011

Да, попробуйте это в вашей модели.

$this->db->query("call {storedprocedure function name} ");

, если у вас возникают проблемы при вызове более 1 хранимой процедуры за раз, вам нужно добавить следующую строку

/* ADD THIS FUNCTION IN SYSTEM/DATABASE/DB_ACTIVE_REC */
/* USAGE $this->db->freeDBResource($this->db->conn_id); */
function freeDBResource($dbh){
    while(mysqli_next_result($dbh)){
            if($l_result = mysqli_store_result($dbh)){
              mysqli_free_result($l_result);
            }
        }
}
3 голосов
/ 20 июня 2015

Если вы используете более поздние версии codeigniter с mssql или sqlsrv с хранимыми процедурами, использование 'CALL', как в query('CALL procedureName($param1,$params,....)'), может не работать.

В случае MSSQL используйте:

$this->db->query('EXEC procedureName')

OR

$this->db->query('EXEC procedureName $param1 $param2 $param3,...')

В некоторых случаях вам может потребоваться включить некоторые константы для драйвера. В этом случае запустите:

$this->db->query('Set MSSQL constant ON )

перед выполнением обычного запроса.

1 голос
/ 22 февраля 2017

Это небольшая модификация сверху ответа. Если вы используете codeigniter 3, поместите этот код в /system/database/drivers/mysqli/mysqli_driver.php:

function free_db_resource()
{
    do
    {
        if($l_result = mysqli_store_result($this->conn_id))
        {
            mysqli_free_result($l_result);
        }
    }
    while(mysqli_more_results($this->conn_id)  && mysqli_next_result($this->conn_id));
}

Тогда просто вызовите функцию, как предложили другие.

1 голос
/ 27 ноября 2014

Простой способ вызвать хранимую процедуру, имеющую параметры, - использовать метод query (), предоставляемый библиотекой базы данных Codeigniter.

В вашей модели: -

function call_procedure(){
    $call_procedure ="CALL TestProcedure('$para1', '$para2', @para3)";
    $this->db->query($call_procedure);
    $call_total = 'SELECT @para3 as Parameter3';
    $query = $this->db->query($call_total);
    return $query->result();
}
1 голос
/ 01 июля 2013

Я добавил следующую функцию в класс CI_DB_mysqli_driver в /system/database/drivers/mysqli/mysqli_driver.php

    function free_db_resource()
    {
        while(mysqli_next_result($this->conn_id))
        {
            if($l_result = mysqli_store_result($this->conn_id))
            {
                mysqli_free_result($l_result);
            }
        }
    }

и используйте его после вызова процедуры

$this->db->free_db_resource();

Благодаря wework4web

0 голосов
/ 28 апреля 2018
public function callSp_model{
   $sql = "CALL Materialwise_PURC_report(?,?,?)";
    $query = $this->lite_db->query($sql,array($supplierid,$fromdate,$todate));
    return $query->result_array(); }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...