0

CodeIgniter 経由で呼び出したいいくつかのストアド プロシージャを含むデータベースがあります。Model クラスに次のコードがあります。

$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

このコードを実行すると、次のエラーが発生します。

致命的なエラー: C:\server\apache\htdocs\application\models\let_model.php 行 1116 の非オブジェクトでメンバー関数 num_rows() を呼び出します

クエリ行を削除すると、選択が正しく機能します。また、ストアド プロシージャへの呼び出しを SELECT コマンドなどに置き換えると、それも適切に機能します。

このエラーが発生する理由について、私が見逃している明らかなものはありますか? 良い答えがない場合、この問題を回避する方法はありますか?

御時間ありがとうございます!

編集:問題をもう少し詳しく調べたところ、ストアド プロシージャに SELECT コマンドが含まれていると、このエラーが発生するようです。更新は適切に機能しているようです。おそらく、この問題は、CodeIgniter が SELECT の結果を処理する方法と関係があるのでしょうか?

4

3 に答える 3

1

この質問はGoogleで最初に表示されるため、次を使用してこれを解決できました:

$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 に答える