記入日:2023-02-02 編集日:2023-02-02
SQL見るだけクエリ。以前データベースのSQLをバックアップする記事を書きましたが、 今回はテーブルの内容をCSVでバックアップする方法を考えてみようと思います。SQL文は少ししか関係しませんが、興味のある方は、参考までにご覧ください。
PHPで2次元配列をCSVに変換してバックアップする方法
// 1.ファイルを開いて書き込みモードに設定する $fp = fopen('backup.csv', 'w'); // 2.2次元配列をループして1行ごとにCSV形式で書き込む foreach ($data as $row) { fputcsv($fp, $row); } // 3.データベースに接続してデータを取得 $pdo = new PDO("mysql:host=localhost;dbname=test_db;charset=utf8", 'root', 'pass'); $stmt = $pdo->prepare("SELECT * FROM table_name"); $stmt->execute(); $result = $stmt->fetchAll(PDO::FETCH_ASSOC); // 4.バックアップ用のフォルダを作成し、日時をつけてバックアップファイルを作成する mkdir('./backup/'); $date = date('Y-m-d_H-i-s'); $fp = fopen('./backup/backup_'.$date.'.csv', 'w'); foreach ($result as $row) { fputcsv($fp, $row); } fclose($fp); // 5.バックアップファイル 新しいもの5つを残す。 $backup_files = array_slice(scandir('./backup/'), 2); if (count($backup_files) >= 5) { usort($backup_files, function($a, $b) { return filemtime('./backup/'.$a) - filemtime('./backup/'.$b); }); for ($i = 0; $i < 4; $i++) { unlink('./backup/'.$backup_files[$i]); } } // 6.データベース切断 $pdo = null;
部分的な解説
mkdir('./backup/');
mkdir()関数は、指定したディレクトリを作成する関数です。今回の場合、「./backup/」というディレクトリを作成しています。 「./」はカレントディレクトリを表しており、今回の場合は「./backup/」というディレクトリが作成されます。 既にフォルダが存在していた場合は、無視されます。
array_slice(scandir('./backup/'), 2);
array_slice()関数は、配列の任意の位置から任意の長さを取得する関数です。 今回の場合、「./backup/」内のファイル一覧を取得し、2番目以降を取得しています。
if (count($backup_files) >= 5) { usort($backup_files, function($a, $b) { return filemtime('./backup/'.$a) - filemtime('./backup/'.$b); }); }
上記のコードは、バックアップファイルが5つ以上存在した場合に実行されます。 usort()関数は、指定した関数を使って配列をソートする関数です。 今回の場合、filemtime()関数を使って「./backup/」内のファイルの最終更新日時を取得し、古い順にソートするために使用しています。 $aと$bは、usort()関数で渡された配列の要素を表しており、filemtime()関数に渡しています。 filemtime()関数は、指定したファイルの最終更新日時を取得します。 return文では、取得した$aと$bの日時の差を比較して、古い順にソートしています。
for ($i = 0; $i < 4; $i++) { unlink('./backup/'.$backup_files[$i]); }
上記のコードは、バックアップファイルが5つ以上ある場合に、 一番古い4つのバックアップファイルを削除するために使用しています。 $iは、0から3までループしています。 unlink()関数は、指定したファイルを削除する関数です。 ./backup/内の$backup_files[$i]のファイルを削除しています。
SQLの使いどころ
サイトに大量の情報を掲載することは、ユーザーにとってとても便利なことです。しかし、情報が多すぎると、目的の情報を見つけるのが困難になります。そのため、SQLを使用することで、情報を効率的に管理することができます。
SQLを使用することで、データベース内の情報を検索したり、フィルタリングしたりすることができます。これにより、ユーザーは目的の情報をスムーズかつ簡単に見つけることができます。
また、SQLを使用することで、データを集計したり、統合したりすることもできます。これにより、ユーザーはさまざまな視点から情報を分析することができます。つまり、サイトに多くの情報を掲載することが重要である一方で、その情報を効率的かつ簡単に管理することが求められる場合には、SQLが不可欠であるといえます。
KK
機械工学を専攻。工業デザイナーとして、国内及び海外の自動車・搬送ラインの設計などに従事した後、2003年にウェブシステム会社を設立。UI設計やウェブシステムの開発、DX化のディレクションなどを行っています。