コピペコードで快適生活

明日使えるソースを自分のために

MySQLにblobで格納されたデータをまとめてファイル出力する

旧システムから新システムへのデータ移行の現場での一コマ。
DBにblobで格納されてた画像データをまとめてファイル出力したかったので、
PHPスクリプトを書いてみた。

<?php
// DB接続情報
$db_host = 'localhost';
$db_user = 'root';
$db_pass = 'hogehoge01';
$db_name = 'db_name';

// 対象テーブルリスト
$tables = array(
  'a_images',
  'b_images',
  'c_images',
  'd_images',
  'e_images',
  'f_images',
);

$db = mysql_connect($db_host, $db_user, $db_pass);

if ($db == false) {
  echo "database connect error\n";
  exit;
}
echo "database connect\n";

if (!mysql_select_db($db_name, $db)) {
  echo "database $db_name is not exist\n";
  exit;
}
echo "selcted database $db_name\n";

foreach ($tables as $table) {
  $sql = "SELECT * FROM $table";
  $result = mysql_query($sql);
  while ($row = mysql_fetch_array($result)) {
    // ファイル出力先ディレクトリ
    $dir_path = 'files' . '/' . $table . '/' . $row['id'];
    mkdir($dir_path, 0777, true);

    // ファイル名はfilename,
    // バイナリはdataカラムに格納されている前提
    $file_path = $dir_path . '/' . $row['filename'];
    $fp = fopen($file_path, 'w');
    fwrite($fp, $row['data']);
    fclose($fp);
    echo 'File output from ' . $table . '(id = ' . $row['id'] . ")\n";
  }
}