[php+sql]JSON形式のカラムに登録したり出力したりする方法

簡単に。

これ

このタイプで作ったカラムを活用するという話。

登録

JSON形式っぽい文字列を作って放り込むというだけことだったりする。

$jsonSet = '{"key1":"val1","key2":"val2",...}';

中身に変数を使う場合はこんな感じ。

$val1 = '***';
$val2 = '***';

$jsonSet = '{"key1":"'.$val1.'","key2":"'.$val2.'",...}';

入れるデータの形式に気をつけるだけ。

INSERTは普通にやる。

$jsonSet = '{"key1":"val1","key2":"val2",...}';
$example01 = '***';
$example02 = '***';

$sqlKey = '(`jsonColumn`, `example1`, `example2`)';
$sqlValue = '(:jsonColumn, :example01, :example02)';

/* $dbh略 */
$sql = "INSERT INTO `example_table` {$sqlKey} VALUES {$sqlValue}";
$stmt = $dbh->prepare($sql);
$stmt->bindValue(':jsonColumn', $jsonSet);
$stmt->bindValue(':example01', $example01);
$stmt->bindValue(':example02', $example02);
$stmt->execute();
$dbh = null;

そんな感じで。

取得・出力

jsonの書式を守ってるので、取り出しもそれに倣う。

まずはデータを拾ってくる。

    $sql = "SELECT * FROM `example_table` 【略】";
    $stmt = $dbh->prepare($sql);
    $stmt->execute();
    $dbh = null;

カラムの情報を取り出す。

if(empty($stmt)){
    print 'データなし';
}else{
    foreach ($stmt as $row) {
        //jsonカラムのデータを取得
        $jsonSet = $row['jsonColumn'];
        //jsonを連想配列に変換
        $jsonSetArray = json_decode($jsonSet, true);
        //keyを指定して値を出力
        print $$jsonSetArray['company'];
    }
}

連想配列にしたら、あとは煮るなり焼くなり使いやすいように展開すればいい。

そんな感じで。

コメント

タイトルとURLをコピーしました