日々の開発やプロジェクトのメンテナンスでは、異なるデータベース間でテーブルをコピーまたは移行する必要がある状況によく遭遇します。これは、たとえば、アプリケーションを新しいサーバーにデプロイするとき、またはデータベースのアップグレードやデータ分割を実行するときによく発生します。 PHP で PDO (PHP Data Objects) 拡張機能を使用すると、このプロセスを効率的かつ柔軟に行うことができます。
PDO は、PHP に組み込まれたデータベース アクセス抽象化レイヤーであり、複数のデータベース (MySQL、SQLite、PostgreSQL など) に統一されたインターフェイスを提供します。 PDO を使用すると、開発者は基盤となるデータベースの違いを気にすることなく、データベースに簡単に接続し、クエリを実行し、データを操作できます。
まず、ソース データベースとターゲット データベースにそれぞれ接続する必要があります。以下の例では、PDO を使用して 2 つの MySQL データベースを接続し、一方のテーブルの構造をコピーする方法を示します。
// ソースデータベースに接続する
$sourceHost = 'source_host';
$sourceDB = 'source_database';
$sourceUser = 'source_username';
$sourcePass = 'source_password';
$sourceDbh = new PDO("mysql:host=$sourceHost;dbname=$sourceDB", $sourceUser, $sourcePass);
// ターゲットデータベースに接続する
$targetHost = 'target_host';
$targetDB = 'target_database';
$targetUser = 'target_username';
$targetPass = 'target_password';
$targetDbh = new PDO("mysql:host=$targetHost;dbname=$targetDB", $targetUser, $targetPass);接続が完了したら、ソース データベース テーブルの構造をクエリして、ターゲット データベースに同じテーブルを作成できます。
$table = 'source_table';
// クエリテーブルの構造
$stmt = $sourceDbh->query("SHOW CREATE TABLE $table");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
// ターゲットデータベースにテーブルを作成する
$targetDbh->exec($result['Create Table']);このようにして、ソース データベースのテーブル構造がターゲット データベースに完全にコピーされます。
次に、テーブル データを移行する方法、つまり、ソース データベースのテーブル データをターゲット データベースの新しいテーブルにエクスポートおよびインポートする方法を示します。
// ターゲットデータベースの古いテーブルを削除します
$targetDbh->exec("DROP TABLE IF EXISTS new_table");
// ソースデータベースからデータを選択します
$stmt = $sourceDbh->query("SELECT * FROM source_table");
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
// ターゲット データベースの新しいテーブルにデータを挿入します。
$table = 'new_table';
foreach ($data as $row) {
$columns = implode(',', array_keys($row));
$values = implode(',', array_map(function ($value) use ($targetDbh) {
return $targetDbh->quote($value);
}, $row));
$targetDbh->exec("INSERT INTO $table ($columns) VALUES ($values)");
}上記のコードを実行すると、ソース データベース テーブル内のすべてのデータがターゲット データベースの新しいテーブルに正常に移行されます。ターゲット テーブルのフィールド構造はソース テーブルと一致している必要があり、そうでない場合は挿入エラーが発生することに注意してください。
PHP と PDO を使用すると、データベース テーブルを簡単にコピーおよび移行できます。テーブル構造全体を移行する場合でも、データをバッチでインポートする場合でも、PDO は統合された安全なインターフェイスを提供します。開発者は、プロジェクトのニーズに基づいて、自動移行スクリプトやデータベース バックアップ ツールにさらに拡張できます。
PDO を適切に使用すると、データベース操作の効率が向上するだけでなく、コードの安全性と保守性も向上します。