尝试使用 CodeIgniter '调用'存储过程
Posted
技术标签:
【中文标题】尝试使用 CodeIgniter \'调用\'存储过程【英文标题】:Trying to 'call' stored procedures with CodeIgniter尝试使用 CodeIgniter '调用'存储过程 【发布时间】:2012-02-21 04:43:10 【问题描述】:我有这个带有 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');
我得到了错误:
此功能不适用于您正在使用的数据库。
到底出了什么问题?
谢谢
【问题讨论】:
【参考方案1】:查看call_function
上的docs。它用于调用非 CI 的 DB 驱动程序原生的函数,而不是用于调用您编写的过程。
您可以检查 CI 2.1.0 上 /system/database/DB_driver.php
Ln 998 中的 call_function
代码,以清楚地了解它在做什么。
【讨论】:
不知道为什么你没有选择这个答案是正确的。文档清楚地说明它用于调用 PHP 数据库函数。它没有提到存储过程。【参考方案2】:以防万一它帮助任何人。我使用这个库来处理 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';
【讨论】:
库只支持返回多个结果集,如果一个过程只返回一个结果ret,会抛出错误。要也支持返回一个结果返回,必须更改行“while ($this->mysqli->next_result());”到“while ($this->mysqli->more_results()&&$this->mysqli->next_result());”。 @Stony 它是一个 do-while 循环,你测试它不工作了吗?以上是关于尝试使用 CodeIgniter '调用'存储过程的主要内容,如果未能解决你的问题,请参考以下文章