読者です 読者をやめる 読者になる 読者になる

FuelPHP+MySQLでSHOWコマンドの結果を取得

※2013/06/05追記
クエリタイプにDB::SELECTと指定するだけで大丈夫なようです。
参考) http://d.hatena.ne.jp/Kenji_s/20130605/fuel_db_query
id:Kenji_s さん情報ありがとうございます。


  • 想定バージョン : FuelPHP 1.6

FuelPHPで『SHOW PROCESSLIST』や『SHOW WARNINGS』等のSHOWコマンドの結果を取りたかったんだけど、下のやり方だと対象の件数しか取れない。。。

<?php
$result = \DB::query('SHOW PROCESSLIST');

pdoを使ってたので、コアの『database/pdo/connection.php』を確認したところ、以下の記述。

<?php
...
if ($type === \DB::SELECT)
{
        // Convert the result into an array, as PDOStatement::rowCount is not reliable
        if ($as_object === false)
        {
                $result = $result->fetchAll(\PDO::FETCH_ASSOC);
        }
        elseif (is_string($as_object))
        {
                $result = $result->fetchAll(\PDO::FETCH_CLASS, $as_object);
        }
        else
        {
                $result = $result->fetchAll(\PDO::FETCH_CLASS, 'stdClass');
        }


        // Return an iterator of results
        return new \Database_Result_Cached($result, $sql, $as_object);
}
elseif ($type === \DB::INSERT)
{
        // Return a list of insert id and rows created
        return array(
                $this->_connection->lastInsertId(),
                $result->rowCount(),
        );
}
else
{
        // Return the number of rows affected
        return $result->errorCode() === '00000' ? $result->rowCount() : -1;
}

SHOW使った時点で件数しか取れないのね。
しょうがないので、以下のようにして取得。

<?php
$db = \Database_Connection::instance();
$result = $db->connection()->query('SHOW WARNINGS');
foreach ($result as $val) {
    echo $val['Message'];
}