Вызов хранимой процедуры из класса Active Record CodeIgniter
В моей настройке приложения CI запросить mssql
база данных. Я хочу выполнить stored procedure
от active record
, Но я не могу получить какую-либо основательную документацию.
Кто-нибудь имеет опыт вызова хранимых процедур с CodeIgniter
и / или Active Record
а передача параметров?
Спасибо,
Билли
6 ответов
Да, попробуйте это в вашей модели.
$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);
}
}
}
Если вы используете более поздние версии codeigniter с mssql или sqlsrv с хранимыми процедурами, используйте 'CALL', как в query('CALL procedureName($param1,$params,....)')
может не работать
В случае MSSQL используйте:
$this->db->query('EXEC procedureName')
ИЛИ ЖЕ
$this->db->query('EXEC procedureName $param1 $param2 $param3,...')
В некоторых случаях вам может потребоваться включить некоторые константы для драйвера. В этом случае запустите:
$this->db->query('Set MSSQL constant ON )
перед запуском вашего обычного запроса.
Я добавил следующую функцию в класс CI_DB_mysqli_driver в /system/database/drivers/mysqli/mysqli_driver.php
функция free_db_resource() { в то время как (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
Это небольшая модификация сверху ответа. Если вы используете 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));
}
Затем просто вызовите функцию, как предложили другие.
Простой способ вызвать вашу хранимую процедуру с параметрами - использовать метод 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();
}
public function callSp_model{
$sql = "CALL Materialwise_PURC_report(?,?,?)";
$query = $this->lite_db->query($sql,array($supplierid,$fromdate,$todate));
return $query->result_array(); }