phpでSQLで取得した複数行・複数列の内容をそのまま出力させる(多次元連想配列)
Pocket

仕事で何故かPHPを少し触る事になった。
で、その中でPHPで作られたコマンドラインツールでクエリの結果(複数行・複数列)をそのまま出力させたい箇所があり、以下のように多次元連想配列を利用すると簡単に書けたので備忘として残しておく。
※以下の例では、PDOを使用してSQLiteに接続している。

Sponsored Links

●test.php

/*
 ==== 変数 ====
*/
$dbfile  = 'test.db'; // 使用するDBファイル
$dbtable = 'TEST';    // SQLを実行するテーブル名
$dbwhere = 'AAA';     // SQLで検索する文字列
$dbcolum = 3;         // 取得するカラム数(列数)

/*
 ==== 関数 ====
*/
// DB接続処理
function SQLite_Connect($sqlite_dbfile)
{
    $dsn = 'sqlite:'. $sqlite_dbfile;
    return new PDO($dsn);
    $opt = array(
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
    );
    return new PDO($dsn,'','', $opt);
}

/*
 ==== Main ====
*/
// DB接続
$pdo=SQLite_Connect($dbfile);

// 実行するクエリの定義
$query = "SELECT  `ID`
                 ,`NAME`
                 ,`DATE`
          FROM   `". $dbtable ."`
          WHERE  `NAME` LIKE '%" . $dbwhere ."%';";

// SQLの実行
$stmt = $pdo->query($query);

// SQLの実行結果を多次元連想配列で処理する
$result = $stmt->fetchAll();
foreach ($result as $key=>$val) {
    $k=0;
    while ($k <= ( $dbcolum - 1)) {
        print $val[$k] ;
        $k=$k+1;
        if ($k < $dbcolum){
            print ",";
        }
    }
    print "\n";
}

20160417_000005

[root@localhost ~]# sqlite3 ./test.db --batch 'SELECT * FROM TEST WHERE NAME LIKE "AAA"; '
1|AAA|2016-04-17 04:01:16
2|AAA|2016-04-17 04:01:17
12|AAA|2016-04-17 04:02:05
13|AAA|2016-04-17 04:02:06
14|AAA|2016-04-17 04:02:06
[root@localhost ~]# php test.php
1,AAA,2016-04-17 04:01:16
2,AAA,2016-04-17 04:01:17
12,AAA,2016-04-17 04:02:05
13,AAA,2016-04-17 04:02:06
14,AAA,2016-04-17 04:02:06

 

Pocket

Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。