FuelPHP で SHOW DATABASES をしたい。
専用のメソッドはないようなので \DB::query を使います。
$ php oil -v Fuel: 1.8-dev running in "development" mode |
問題
\DB::query('SHOW DATABASES')->execute();// var_dump すると int(5) のように数値が返ってくる |
を実行してもデータベース名らしきデータが返ってきません。
解決方法
\DB::query('SHOW DATABASES', \DB::SELECT)->execute(); |
とすることでデータベース名を含む配列が返ってくるようになります。
理由
Database_Query の $this->_type を \DB::SELECT にする必要があるのですが
\DB::query の第2引数を空にするとコンストラクタで $this->_type に null が入ります。
SHOW の場合以下の箇所で $this->_type が上書きされないので \DB::SELECT になりません。
// fuel\core\classes\database\query.php L261 switch(strtoupper(substr(ltrim($sql,'('), 0, 6))) { case 'SELECT': $this->_type = \DB::SELECT; break; case 'INSERT': case 'CREATE': $this->_type = \DB::INSERT; break; } |
今はドキュメントが修正されていますが元々はデフォルトが DB::SELECT である旨書かれていたようなので
case default: を追加したらいいようにも思いますがどうなんでしょうか。
【参考】
FuelPHP DB::query() の使い方 ~ SQL クエリタイプの指定