在日常開發與項目維護中,常常會遇到需要在不同數據庫之間複製或遷移表的情況。例如,在應用部署到新服務器時,或在執行數據庫升級與數據拆分時,這類操作都非常常見。使用PHP中的PDO(PHP Data Objects)擴展可以讓這一過程變得高效且靈活。
PDO是PHP內置的數據庫訪問抽象層,它為多種數據庫(如MySQL、SQLite、PostgreSQL等)提供統一的接口。通過PDO,開發者可以方便地連接數據庫、執行查詢及操作數據,而無需關心底層數據庫的差異。
首先,我們需要分別連接到源數據庫與目標數據庫。在下方的示例中,將演示如何使用PDO連接兩個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,不僅能提升數據庫操作的效率,也能讓代碼更加安全、可維護。