質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.10%

FuelPHPでDBからデータをSELECTできるようにしたい。現状はレコードがあるのに件数0で返ってくる。

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 471

kamchatka

score 13

前提・実現したいこと

FuelPHPを使ってアプリを作っています。
ModelクラスからSelect文を発行しても、データが取得できずに困っています。
phpMyAdminで確認しても確実にデータが入っています。
また、selectはできませんが、insertはできるので、接続設定の問題ではなさそうです。
さらに、DB::last_query()で出力したSELECT文をphpMyAdmin上で入力すると正しくデータが取得できます。

現在の状況

下記のスクショの通り、phpMyAdminには確かにデータが入っています。
また同じパッケージの、FuelPHPのModelクラスを使って、insertすることはできますが、selectができない状態です。
DBにselect文を投げた戻りは、$result['data']に格納していますが、
デバッガで中身を見ても、_resultや_total_rowsの中身に正しくDBの内容が入っていない状態です。
またDB::last_query()をログ出力すると、

引用テキストINFO - 2019-05-05 06:43:47 --> SELECT * FROM contents

と表示されるので、sql自体は発行されているように見えます。。

デバッグの様子

phpMyAdmin

該当のソースコード

<?php

class Model_Contents extends Model_Crud {

    //テーブルの名前を指定
    protected static $_table_name = 'contents';
    //テーブルの主キーを指定
    protected static $_primary_key = 'content_id';
//    //テーブルの作成時刻を指定
//    protected static $_created_at = 'crt_timestamp';
//    //テーブルの更新時刻を指定
//    protected static $_updated_at = 'upd_timestamp';

    public static function get_list() {
        Log::info(__CLASS__ . __METHOD__);
//        $query = Model_Contents::forge()->set(array(
//            'title' => 'title3',
//            'user_id' => '0002',
//            'del_flg' => '0',
//        ));
//        $result['data'] = $query->save();

        $query = 'SELECT * FROM `contents`';
        $result['data'] = DB::query($query, DB::SELECT)->execute()->as_array();
        //ログに実行したクエリを表示
        Log::info(DB::last_query());
        return $result['data'];
    }

}
class Controller_Contents extends Controller {

    public function action_index() {
        $db_data_contents_list = Model_Contents::get_list();
        $view = View::forge('template/template_1col');
        $view->set('head', View::forge('template/head'));
        $view->set('main', View::forge('contents/contents_list'));
        $view->set_global('top_nav', View::forge('template/top_nav'));
        $view->set('footer', 'test');
        $view->set_global('db_data_contents_list', $db_data_contents_list);
        return $view;
    }

}
<?php
/**
 * Use this file to override global defaults.
 *
 * See the individual environment DB configs for specific config information.
 */

return array(

    'default' => array(
        'type' => 'mysqli',
        'connection' => array(
            'hostname' => 'localhost',
            'port' => '8889',
            'database' => 'fuel_dev',
            'username'   => 'root',
            'password'   => 'root',
            'persistence' => false,
        ),
        'identifier' => '`',
        'table_prefix' => '',
        'charset' => 'utf8',
        'collation' => false,
        'enable_cache' => false,
        'caching' => false,
        'profiling' => true,
        'readonly' => false,
    ),

);

試したこと

・ソースコード上でコメントアウトされているinsert文を発行した所、うまく登録はできました。
・where句を付け足しても、結果は同じでした。

補足情報(FW/ツールのバージョンなど)

MAMP
php 5.6.40
mysql 5.7.25
fuelphp 1.8.1

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • ssasaki

    2019/05/05 03:21

    「データが取得できず」とは具体的にどのような現象なのでしょう?
    エラーなどは出ず、array() が返ってきているということでしょうか?
    あと、Model_Contents::get_list() を実行するという話なのだと思いますが、実際の呼び出しとその結果や DB::last_query() の結果を明記した方が良い回答が得られやすいと思います。

    キャンセル

  • kamchatka

    2019/05/05 13:33

    ご指摘ありがとうございます。追記しました。
    >エラーなどは出ず、array() が返ってきている
    はい、その状態です。詳しくは質問文に書かせていただきました。
    もし解決方法がわかれば、ご教示いただけると大変助かります。。

    キャンセル

  • ssasaki

    2019/05/06 22:43

    ざっと見た感じは問題ないように見えますね。
    FuelPHP+mysqli は使ったことが無いので検証もできないのですが、PDOで同じようなコードを動かしてみると普通にSELECTでデータを取れました。
    おそらくかなり根本的な部分で問題があるのだと思いますが、ちょっと分からないです。すみません。

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.10%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる
  • トップ
  • PHPに関する質問
  • FuelPHPでDBからデータをSELECTできるようにしたい。現状はレコードがあるのに件数0で返ってくる。