Попытка «вызвать» хранимые процедуры с помощью CodeIgniter - PullRequest
3 голосов
/ 28 января 2012

у меня есть этот рабочий код с CI:

$this->db->query("call nameOfProcedure('param1', @param2)");
$query = $this->db->query('SELECT @param2 as results');
$row = $query->row();

это работает, но если я попытаюсь использовать:

$this->db->call_function('nameOfProcedure', 'param1', '@param2');

я получаю ошибку:

Эта функция недоступна для используемой вами базы данных.

Что именно не так?

Спасибо

Ответы [ 2 ]

4 голосов
/ 21 июня 2012

На всякий случай это кому-нибудь поможет. Я использую эту библиотеку для работы с хранимыми процедурами в CI, она также поддерживает несколько наборов результатов.

вот код

Я называю это Mydb.php

<?php #if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Mydb
{
   private $CI, $Data, $mysqli, $ResultSet;

   /**
   * The constructor
   */

   function __construct()
   {
     $this->CI =& get_instance();
     $this->Data = '';
     $this->ResultSet = array();
     $this->mysqli = $this->CI->db->conn_id;
   }

    public function GetMultiResults($SqlCommand)
    {
    /* execute multi query */
    if (mysqli_multi_query($this->mysqli, $SqlCommand)) {
        $i=0;
        do
        {

             if ($result = $this->mysqli->store_result()) 
             {
                while ($row = $result->fetch_assoc())
                {
                    $this->Data[$i][] = $row;
                }
                mysqli_free_result($result);
             }
            $i++; 
        }
        while ($this->mysqli->next_result());
    }
    return $this->Data;

   }   
}
?>  

Назовите это так от контроллера

$this->load->library('mydb');
$arr  = $this->mydb->GetMultiResults("CALL GetReferrals()");

Также обязательно установите mysqli драйвер в application/config/database.php

$db['default']['dbdriver'] = 'mysqli';
4 голосов
/ 28 января 2012

Проверьте документы на call_function.Он предназначен для вызова функций, которые не являются родными для драйвера БД CI, а не для вызова процедур, которые вы написали.

Вы можете проверить код call_function в /system/database/DB_driver.php Ln 998 на CI 2.1.0, чтобы увидетьясно, что он делает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...