From info @ scissorhands.jpn.org Sat Dec 1 12:48:27 2012 From: info @ scissorhands.jpn.org (=?iso-2022-jp?B?GyRCOE1FRCEhOS0bKEI=?=) Date: Sat, 1 Dec 2012 12:48:27 +0900 Subject: [Codeigniter-users] =?iso-2022-jp?b?GyRCJTklSCUiJUklVyVtJTcbKEI=?= =?iso-2022-jp?b?GyRCITwlOCVjJE4bKEJPVVQbJEJDTTxoRkAkSyREJCQkRhsoQg==?= In-Reply-To: References: Message-ID: <4EABAD16-F515-4394-B132-A4F48681E6F2@scissorhands.jpn.org> こんにちは、戸田です。 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 > Codeigniter-users @ lists.sourceforge.jp > http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users From kobataka14 @ gmail.com Sat Dec 1 19:23:09 2012 From: kobataka14 @ gmail.com (taka koba) Date: Sat, 1 Dec 2012 19:23:09 +0900 Subject: [Codeigniter-users] =?iso-2022-jp?b?GyRCJTklSCUiJUklVyVtJTcbKEI=?= =?iso-2022-jp?b?GyRCITwlOCVjJE4bKEJPVVQbJEJDTTxoRkAkSyREJCQbKEI=?= =?iso-2022-jp?b?GyRCJEYbKEI=?= In-Reply-To: <4EABAD16-F515-4394-B132-A4F48681E6F2@scissorhands.jpn.org> References: <4EABAD16-F515-4394-B132-A4F48681E6F2@scissorhands.jpn.org> Message-ID: 戸田様 kobaです。大変ご丁寧なアドバイスありがとうございます!しかも、わざわざ調べていただき恐縮で す。 複数クエリの実行はドライバによること、また独自関数で処理をまとめるというご提案大変参考になり ました。コードの分かりやすさを考え、今回は独自関数を作る方向で進めてみようと思います。ありが とうございましたm(_ _)m koba 2012年12月1日 12:48 戸田 広 : > こんにちは、戸田です。 > > 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 > > Codeigniter-users @ lists.sourceforge.jp > > http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users > > _______________________________________________ > Codeigniter-users mailing list > Codeigniter-users @ lists.sourceforge.jp > http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users > -------------- next part -------------- HTMLの添付ファイルを保管しました... URL: http://lists.sourceforge.jp/mailman/archives/codeigniter-users/attachments/20121201/434edfbf/attachment.htm From kojima157 @ gmail.com Tue Dec 18 18:16:06 2012 From: kojima157 @ gmail.com (=?ISO-2022-JP?B?GyRCPi5FZzdyQkBPOhsoQg==?=) Date: Tue, 18 Dec 2012 18:16:06 +0900 Subject: [Codeigniter-users] =?iso-2022-jp?b?KBskQkw1QmobKEIp?= Message-ID: 小島と申します。 CodeIgniterで不明点があるので質問させてください。 ログインして使用する社内Webシステムを作っています。 ログイン画面から直接ユーザ名・パスワードを入力してログインする方法に加え、 ある別のシステムAと連動させて、Aシステム上のボタンから本システムを起動する場合は、 ID、パスワードをAシステムから引き継いで自動ログインするようなものを作ろうとしています。 例えばアイコンから起動する場合は下記のURIとし、 http://xxxxxx/test/index.php/c_test/login Aシステムから連動して起動する場合は http://xxxxxx/test/index.php/c_test/login?UserID=xxxx などとしてAシステムで使用している社員ID(など)をGET送信し、 受け側(ログイン画面)ではUserIDのGET値があればheader("Location:・・・・")で メイン画面へ飛ばすようにしようとしています。 そこでGET値があるかどうかの判定なのですが、 例えば下記のような感じでいろいろ試しているのですが どうしてもGET値の有無の判定がうまくいきません。 (GET値があると判定されます。ビューへechoで表示しても実際はGET値はないようです。) $jdg_get = $this->input->get("UserID",TRUE) if (isset($jdg_get)!==FALSE){ //ここを通るかテスト } $jdg_get = $this->input->get("UserID",TRUE) if ($jdg_get!==""){ //ここを通るかテスト } どこがいけないと思われるかご教示願います。 From info @ scissorhands.jpn.org Tue Dec 18 18:42:30 2012 From: info @ scissorhands.jpn.org (=?iso-2022-jp?B?GyRCOE1FRCEhOS0bKEI=?=) Date: Tue, 18 Dec 2012 18:42:30 +0900 Subject: [Codeigniter-users] =?iso-2022-jp?b?KBskQkw1QmobKEIp?= In-Reply-To: References: Message-ID: <236FB553-D38C-4C99-9932-8F47C84B587E@scissorhands.jpn.org> こんにちは、戸田です。 CodeIgniter のバージョンがわからないので はずしているかもしれませんが、 手元の 2.0.3 と 2.1.3 のコードを読むかぎりでは同じ処理なので 回答してみます。 get() メソッドのコードは /system/core/Input.php にありますが、 ご提示の例では、最終的には次のような処理の結果が返っているはずです。 ======================================== if ( ! isset($_GET['UserID'])) { return FALSE; } ======================================== このため、 if ($jdg_get !== FALSE) などとすれば ご想定通りの動きになると思われます。 以上です。 On 2012/12/18, at 18:16, 小島健太郎 wrote: > 小島と申します。 > > CodeIgniterで不明点があるので質問させてください。 > > ログインして使用する社内Webシステムを作っています。 > > ログイン画面から直接ユーザ名・パスワードを入力してログインする方法に加え、 > ある別のシステムAと連動させて、Aシステム上のボタンから本システムを起動する場合は、 > ID、パスワードをAシステムから引き継いで自動ログインするようなものを作ろうとしています。 > > 例えばアイコンから起動する場合は下記のURIとし、 > http://xxxxxx/test/index.php/c_test/login > Aシステムから連動して起動する場合は > http://xxxxxx/test/index.php/c_test/login?UserID=xxxx > などとしてAシステムで使用している社員ID(など)をGET送信し、 > 受け側(ログイン画面)ではUserIDのGET値があればheader("Location:・・・・")で > メイン画面へ飛ばすようにしようとしています。 > > そこでGET値があるかどうかの判定なのですが、 > 例えば下記のような感じでいろいろ試しているのですが > どうしてもGET値の有無の判定がうまくいきません。 > (GET値があると判定されます。ビューへechoで表示しても実際はGET値はないようです。) > > $jdg_get = $this->input->get("UserID",TRUE) > if (isset($jdg_get)!==FALSE){ > //ここを通るかテスト > } > > $jdg_get = $this->input->get("UserID",TRUE) > if ($jdg_get!==""){ > //ここを通るかテスト > } > > どこがいけないと思われるかご教示願います。 > > _______________________________________________ > Codeigniter-users mailing list > Codeigniter-users @ lists.sourceforge.jp > http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users From fcqdy819 @ gmail.com Tue Dec 18 18:54:31 2012 From: fcqdy819 @ gmail.com (=?ISO-2022-JP?B?GyRCOzNLXD8/NUEbKEI=?=) Date: Tue, 18 Dec 2012 18:54:31 +0900 Subject: [Codeigniter-users] =?iso-2022-jp?b?KBskQkw1QmobKEIp?= In-Reply-To: <236FB553-D38C-4C99-9932-8F47C84B587E@scissorhands.jpn.org> References: <236FB553-D38C-4C99-9932-8F47C84B587E@scissorhands.jpn.org> Message-ID: 小島様 こんにちわ やままさと申します。 config.phpのenable_query_stringsやallow_get_arrayはtrueになっていますでしょうか? (設定変更の際は、各設定値の意味を確認して変更してください...) CIのバージョンによってはデフォルトで$_GETが無効の場合があります。 見当違いでしたらすいません。 2012年12月18日 18:42 戸田 広 : > こんにちは、戸田です。 > > CodeIgniter のバージョンがわからないので > はずしているかもしれませんが、 > 手元の 2.0.3 と 2.1.3 のコードを読むかぎりでは同じ処理なので > 回答してみます。 > > get() メソッドのコードは /system/core/Input.php にありますが、 > ご提示の例では、最終的には次のような処理の結果が返っているはずです。 > > ======================================== > > if ( ! isset($_GET['UserID'])) > { > return FALSE; > } > > ======================================== > > このため、 if ($jdg_get !== FALSE) などとすれば > ご想定通りの動きになると思われます。 > > > > 以上です。 > > > > > On 2012/12/18, at 18:16, 小島健太郎 wrote: > > > 小島と申します。 > > > > CodeIgniterで不明点があるので質問させてください。 > > > > ログインして使用する社内Webシステムを作っています。 > > > > ログイン画面から直接ユーザ名・パスワードを入力してログインする方法に加え、 > > ある別のシステムAと連動させて、Aシステム上のボタンから本システムを起動する場合は、 > > ID、パスワードをAシステムから引き継いで自動ログインするようなものを作ろうとしています。 > > > > 例えばアイコンから起動する場合は下記のURIとし、 > > http://xxxxxx/test/index.php/c_test/login > > Aシステムから連動して起動する場合は > > http://xxxxxx/test/index.php/c_test/login?UserID=xxxx > > などとしてAシステムで使用している社員ID(など)をGET送信し、 > > 受け側(ログイン画面)ではUserIDのGET値があればheader("Location:・・・・")で > > メイン画面へ飛ばすようにしようとしています。 > > > > そこでGET値があるかどうかの判定なのですが、 > > 例えば下記のような感じでいろいろ試しているのですが > > どうしてもGET値の有無の判定がうまくいきません。 > > (GET値があると判定されます。ビューへechoで表示しても実際はGET値はないようです。) > > > > $jdg_get = $this->input->get("UserID",TRUE) > > if (isset($jdg_get)!==FALSE){ > > //ここを通るかテスト > > } > > > > $jdg_get = $this->input->get("UserID",TRUE) > > if ($jdg_get!==""){ > > //ここを通るかテスト > > } > > > > どこがいけないと思われるかご教示願います。 > > > > _______________________________________________ > > Codeigniter-users mailing list > > Codeigniter-users @ lists.sourceforge.jp > > http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users > > _______________________________________________ > Codeigniter-users mailing list > Codeigniter-users @ lists.sourceforge.jp > http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users > -------------- next part -------------- HTMLの添付ファイルを保管しました... URL: http://lists.sourceforge.jp/mailman/archives/codeigniter-users/attachments/20121218/736e0d65/attachment.htm From kojima157 @ gmail.com Wed Dec 19 12:30:59 2012 From: kojima157 @ gmail.com (=?ISO-2022-JP?B?GyRCPi5FZzdyQkBPOhsoQg==?=) Date: Wed, 19 Dec 2012 12:30:59 +0900 Subject: [Codeigniter-users] =?iso-2022-jp?b?KBskQkw1QmobKEIp?= In-Reply-To: References: <236FB553-D38C-4C99-9932-8F47C84B587E@scissorhands.jpn.org> Message-ID: ご回答ありがとうございます。 > このため、 if ($jdg_get !== FALSE) などとすれば > ご想定通りの動きになると思われます。 これで解決しました。ありがとうございました。 > CIのバージョンによってはデフォルトで$_GETが無効の場合があります。 このような設定もあったのですね。 今後は設定にも気を配っていきたいとおもいます。 ありがとうございました。 小島 2012年12月18日 18:54 山本真義 : > 小島様 > > こんにちわ やままさと申します。 > config.phpのenable_query_stringsやallow_get_arrayはtrueになっていますでしょうか? > (設定変更の際は、各設定値の意味を確認して変更してください...) > > CIのバージョンによってはデフォルトで$_GETが無効の場合があります。 > 見当違いでしたらすいません。 > > > > 2012年12月18日 18:42 戸田 広 : > >> こんにちは、戸田です。 >> >> CodeIgniter のバージョンがわからないので >> はずしているかもしれませんが、 >> 手元の 2.0.3 と 2.1.3 のコードを読むかぎりでは同じ処理なので >> 回答してみます。 >> >> get() メソッドのコードは /system/core/Input.php にありますが、 >> ご提示の例では、最終的には次のような処理の結果が返っているはずです。 >> >> ======================================== >> >> if ( ! isset($_GET['UserID'])) >> { >> return FALSE; >> } >> >> ======================================== >> >> このため、 if ($jdg_get !== FALSE) などとすれば >> ご想定通りの動きになると思われます。 >> >> >> >> 以上です。 >>