taka koba
kobat****@gmail*****
2012年 12月 1日 (土) 19:23:09 JST
戸田様 kobaです。大変ご丁寧なアドバイスありがとうございます!しかも、わざわざ調べていただき恐縮で す。 複数クエリの実行はドライバによること、また独自関数で処理をまとめるというご提案大変参考になり ました。コードの分かりやすさを考え、今回は独自関数を作る方向で進めてみようと思います。ありが とうございましたm(_ _)m koba 2012年12月1日 12:48 戸田 広 <info****@sciss*****>: > こんにちは、戸田です。 > > CodeIgniter でのクエリーは > 最終的には PHP ネイティブの関数に渡されます。 > ご例示されたような、複数のクエリーをセミコロンで区切って > 一度に実行するやり方が実行できるか できないかは、 > 対象となる PHP の関数が そのやり方に対応しているか していないか に > 依存します。 > 例えば、 mysql ドライバーの場合は mysql_query() が実行されていますが、 > これは複数のクエリーを一度に実行することはできません。 > > 私は、処理はすべてモデルクラス内に泥臭く書いていますので、 > ストアドプロシージャを利用するうえで効率的な方法がないか > 今回 はじめて確認してみましたが、 > ご例示のような、実行文を2回実行する以上に洗練されたやり方は > 残念ながら見つけることができませんでした。 > > CI_Model を継承した MY_Model クラスを作り > ( /application/core ディレクトリ内に置きます)、 > その中で ご希望の処理を実装したメソッドを作れば > 各モデルクラスでの記述は減らすことができそうです。 > 簡単に書くと、次のような感じかと思います。 > > function call_stored_procedure($stored_procedure_name, > $output_variable_name) > { > $this->db->query('call ' . $stored_procedure_name . '(' . > $output_variable_name . ')'); > $query = $this->db->query('select ' . $output_variable_name); > return $query->result(); > } > > > > 以上です。 > > > > > On 2012/11/30, at 23:35, taka koba wrote: > > > はじめてメールさせていただきます。kobaと申します。 > > Codeigniterの扱いにはまだ不慣れな者です。 > > 表題の件、もしお分かりになる方がおりましたらご教授ください。よろしくお願いしますm(_ _)m > > > > MySQLでストアドプロシージャーを作り、ストアドプロシージャー実行時の引数に出力値を格納するような処理を考えています。 > > > > $this->db->query("call cal_total(@num)"); > > $query = $this->db->query("select @num"); > > > > ここで cal_total(OUT num INT) はレコードのトータル数を求めて、変数numにその数を格納するようなストアドプロシージャー > > だとします。とりあえず、上記のようなコードを書くと、$queryには@numカラムに値が入った結果が帰ってくるので、 > > 希望通りの処理ができるのですが書き方としてもう少しスマートな方法はないものかと思い、質問させていただきました( > > たとえば、$this->db->query("call cal_total(@num); select @num"); > のように1行で記述できるような方法等)。 > > > > マニュアルを見てみたのですが、希望の処理が見つかりませんでした。出力を得たいストアドプロシージャーをCodeigniter > > で書きたい場合は、このように実行文を2回書くような方法になるのでしょうか。 > > > > よろしくお願いいたしますm( _ _ )m > > _______________________________________________ > > Codeigniter-users mailing list > > Codei****@lists***** > > http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users > > _______________________________________________ > Codeigniter-users mailing list > Codei****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users > -------------- next part -------------- HTMLの添付ファイルを保管しました... Download