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

村上 著者:村上

【解決済】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でストアドプロシージャを実行する方法でした。
ちょっとしたミスでしたが、私はこういう些細なミス程ハマりやすいので、今後もこまめに備忘録として投稿していきたいと思います。

  • この記事いいね! (1)

著者について

村上

村上 administrator