일상적인 개발 및 프로젝트 유지 관리에서 우리는 서로 다른 데이터베이스 간에 테이블을 복사하거나 마이그레이션해야 하는 상황에 자주 직면합니다. 예를 들어, 새 서버에 애플리케이션을 배포할 때나 데이터베이스 업그레이드 및 데이터 분할을 수행할 때 이는 일반적입니다. PHP에서 PDO(PHP 데이터 개체) 확장을 사용하면 이 프로세스를 효율적이고 유연하게 만들 수 있습니다.
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를 올바르게 사용하면 데이터베이스 작업의 효율성이 향상될 뿐만 아니라 코드를 더욱 안전하고 유지 관리하기 쉽게 만들 수 있습니다.