2012-09-18 17 views
0

我有一個數據庫,它有幾個存儲過程,我想通過CodeIgniter調用。我在我的模型類下面的代碼:存儲過程調用後的Codeigniter DB錯誤

$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 

當我運行這段代碼,我得到以下錯誤:

Fatal error: Call to a member function num_rows() on a non-object in C:\server\apache\htdocs\application\models\let_model.php on line 1116

如果我刪除查詢行,選擇正常工作。另外,如果我用一個SELECT命令替換存儲過程的調用,它也可以正常工作。

有什麼明顯的我失蹤了爲什麼我得到這個錯誤?如果沒有好的答案,是否有辦法解決這個問題?

謝謝你的時間!

編輯:深入研究這個問題後,似乎如果我的存儲過程包含SELECT命令會發生此錯誤。更新似乎正常工作。也許這個問題與CodeIgniter如何處理SELECT結果有關?

回答

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; 

我仍然不知道的,爲什麼這會導致錯誤的根本原因,但這種解決方案將滿足我目前的工作。的

0

只使用

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

1

由於首次出現在谷歌這個問題,我已經設法通過使用來解決這個問題:

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

而不是常規的查詢功能。