【解決済】FuelPHPでストアドプロシージャを実行する方法

以前に投稿した、FuelPHPでストアドプロシージャを実行する方法について、解決したので改めて記事にまとめてみます。
詳しくは、先日の記事をご覧ください。

【未解決】FuelPHPでストアドプロシージャを実行してデータを取得したい
https://cpoint-lab.co.jp/【未解決】fuelphpでストアドプロシージャを実行して/

今回実行するストアドプロシージャはこちら。
年と月を指定して、この期間に該当するデータを取得します。

1> EXEC dbo.user_month_report @year =2017, @month =12;
2> go

こちらは、直接ターミナルで実行すると、データが取得できるので、プロシージャには問題なし。

そして、前回のコードは下記の通り。

// 修正前
$result = DB::query("EXEC dbo.user_month_report @year =2017, @month =12;");
$result->execute();

こちらを実行すると、結果で bool(true) が返ってきてしまい、理由がわからず頭を抱えていましたが、実行の方法が間違っていました。

修正後の正しいコードはこちら。

// 修正後
$tmp = DB::query("EXEC dbo.user_month_report @year =2017, @month =12;", DB::SELECT);
$result = $tmp->execute()->as_array();

修正前のコードでは、execute() で実行したものをそのまま出力しようとしていたのですが、そうではなく、一旦変数に代入してから出力したところ、無事にデータが取得できているのを確認できました。
また、DB::query()の第二引数の$typeに SQL クエリタイプとして「DB::SELECT」を指定して、データを取得するプロシージャであることを明記しました。
これも必須の指定のようでした。

更に、取得できたデータに対して as_array() を使うと、データを配列に格納できて、扱いやすくなります。
execute() と as_array() はセットで覚えるのがおすすめですね。

以上、FuelPHPでストアドプロシージャを実行する方法でした。
ちょっとしたミスでしたが、私はこういう些細なミス程ハマりやすいので、今後もこまめに備忘録として投稿していきたいと思います。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG