我正在开展Codeigniter
项目,我正在使用stored procedures
进行后端操作。当我使用单stored procedure
作为SELECT
语句时,它会正常工作。但是,当我试图为同一个操作调用两个或更多stored procedures
时,它会给我一个错误。
错误:
发生数据库错误
错误号码:2014
命令不同步;你现在不能运行这个命令
调用all_Cluster()
文件名:C:/xampp/htdocs/prop/system/database/DB_driver.php
行号:691
这是我的代码:
型号:
public function getProperty()
{
$query = $this->db->query('call select_prop_SP()');
// if ($query->num_rows() > 0) {
return $query->result();
$query->next_result();
$query->free_result();
}
public function area()
{
$query = $this->db->query('call select_area_SP()');
// if ($query->num_rows() > 0) {
return $query->result();
$query->next_result();
$query->free_result();
}
public function cluster()
{
$query = $this->db->query('call select_Cluster_SP()');
// if ($query->num_rows() > 0) {
return $query->result();
$query->next_result();
$query->free_result();
}
这是我的SP:
select_area_SP
BEGIN
SELECT `area_id`, `area_name`, `area_status` FROM `tbl_area`;
END
select_Cluster_SP
BEGIN
SELECT `cluster_id`, `cluster_name`, `area_id`, `cluster_status` FROM `tbl_cluster`;
END
我用谷歌搜索了很长时间,但我没有得到任何积极的结果。 我经历过Calling stored procedure in codeigniter 并做出所有改变,但没有成功。
感谢任何形式的帮助。提前谢谢。
答案 0 :(得分:1)
您next_result
和free_result
函数未执行,因为return
句子退出函数。您必须在返回之前将结果存储在临时变量中:
public function cluster()
{
$query = $this->db->query('call select_Cluster_SP()');
$result = $query->result();
$query->next_result();
$query->free_result();
return $result;
}
或者在每次存储过程调用后将配置更改为包含next_result函数的mysqli
驱动程序:
$db['default']['dbdriver'] = 'mysqli';