タイトルにある通り、今回の記事はまだ未実装、というか実現できていないことについて。
ということで、もし解決策をご存知の方がいらっしゃれば、何卒ご教授くださいますようお願い致します。
ストアドプロシージャについては、こちらの記事がわかりやすいかと。
ストアドプロシージャの基本的ななにか – Qiita
https://qiita.com/setsuna82001/items/e742338eb93e3a48ba46
こちらの記事によると、ストアドプロシージャとは「データベース上での一連の処理に、名前をつけて関数のように呼び出して使用できるもの」とのこと。
データベース上で動作が完結するので、開発言語に依存しません。
FuelPHPについて、公式サイトはこちらから。
FuelPHPは、PHP5.3以上を対象に開発されたWebフレームワークです。
他のフレームワークに比べて規約が少なく、また高速で軽量なため、使いやすいのが特徴です。
こちらのサイトもご参考に。
高速で軽量なフレームワークFuelPHPを使う
http://www.buildinsider.net/web/bookphplib100/096
そして、今回実現したいのは、この両方を利用して、データベースからデータを取得する方法についてです。
実行するストアドプロシージャはこんな感じ。
1> EXEC dbo.user_month_report @year =2017, @month =12; 2> go
※実際に動作させているものとは異なります。
こちらをターミナルで実行すると、望んだとおりの結果が得られます。
したがって、ストアドプロシージャ自体には問題はなさそう。
が、こちらを下記のように FuelPHP で実行すると、結果が何故か bool(true) が返ってきます。
$result = DB::query("EXEC dbo.user_month_report @year =2017, @month =12;"); $result->execute();
ストアドプロシージャに問題がないようなので、十中八九 FuelPHP が原因というのは分かるのですが、その解決策がどうしてもわかりません。
FuelPHPのドキュメントにも、ストアドプロシージャの実行方法についての記述がないため、そもそも対応していないのでしょうか。
ちなみに、FuelPHPのフォーラムに、「DB Class with mysql – select from stored procedure」という、今回の状況に似たような投稿があったのは見つけました。
その中で、DB::query()の第二引数の$typeに SQL クエリタイプとして「DB::SELECT」を指定するといいとの記述があったので試してみましたが、残念ながら結果は変わりませんでした。
参考にしたフォーラムの投稿はこちら。
DB Class with mysql – select from stored procedure
https://fuelphp.com/forums/discussion/4299
新しいライブラリやフレームワークを使うのは、やはり難しいですね。