0

我有一个数据库,其中包含一些我想通过 CodeIgniter 调用的存储过程。我的模型类中有以下代码:

$sql = "CALL `stored_proc`(1)";
$query = $this->db->query($sql); //This call breaks the DB :(

$this->db->select('status');
$this->db->where('id', $id);
$query = $this->db->get('table');

print($query->num_rows()); //line 1116

当我运行此代码时,我收到以下错误:

致命错误:在第 1116 行的 C:\server\apache\htdocs\application\models\let_model.php 中的非对象上调用成员函数 num_rows()

如果我删除查询行,则选择可以正常工作。此外,如果我用 SELECT 命令替换对存储过程的调用,它也可以正常工作。

为什么我收到这个错误,有什么明显的我遗漏了吗?如果没有好的答案,有没有办法解决这个问题?

谢谢你的时间!

编辑:在深入研究问题后,如果我的存储过程包含 SELECT 命令,似乎会发生此错误。更新似乎工作正常。也许这个问题与 CodeIgniter 如何处理 SELECT 结果有关?

4

3 回答 3

1

由于这个问题首先出现在谷歌上,我设法通过使用解决了这个问题:

$this->db->simple_query($query);

而不是常规的查询功能。

于 2013-02-10T11:15:12.163 回答
0

问题是存储过程中的 SELECT 导致 CodeIgniter 出现问题。通过确保所有 SELECT 都是定向的(即使用 INTO 子句),存储过程能够成功运行。

例如,

-- This causes an error in CodeIgniter when inside a stored procedure.
SELECT GET_LOCK('lock1',0);  

-- This does not.
DECLARE _lock_result INT;
SELECT GET_LOCK('lock1',0) INTO _lock_result;

我仍然不知道为什么这会导致错误的根本原因,但这个解决方案足以满足我目前的工作。

于 2012-09-19T01:26:47.873 回答
0

仅使用

$query->num_rows代替$query->num_rows()

于 2012-09-19T08:33:36.527 回答