У меня этот рабочий код с 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');
я получаю ошибку:
Эта функция недоступна для используемой базы данных.
Что не так?
благодаря
Проверьте документы на call_function
. Это для вызовов функций, которые не являются родными для драйвера DB CI, а не для вызовов, которые вы написали.
Вы можете проверить код call_function
в /system/database/DB_driver.php
Ln 998 на CI 2.1.0, чтобы четко видеть, что он делает.
На всякий случай это помогает кому угодно. Я использую эту библиотеку для работы с хранимыми процедурами в 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';