Lors du développement quotidien et de la maintenance de projets, nous rencontrons souvent des situations dans lesquelles les tables doivent être copiées ou migrées entre différentes bases de données. Ceci est courant, par exemple, lors du déploiement d'une application sur un nouveau serveur ou lors de la mise à niveau d'une base de données et du fractionnement des données. L'utilisation de l'extension PDO (PHP Data Objects) en PHP peut rendre ce processus efficace et flexible.
PDO est la couche d'abstraction d'accès aux bases de données intégrée de PHP, qui fournit une interface unifiée pour plusieurs bases de données (telles que MySQL, SQLite, PostgreSQL, etc.). Grâce à PDO, les développeurs peuvent facilement se connecter à la base de données, effectuer des requêtes et manipuler des données sans avoir à se soucier des différences dans la base de données sous-jacente.
Tout d’abord, nous devons nous connecter respectivement à la base de données source et à la base de données cible. Dans l'exemple ci-dessous, nous allons montrer comment utiliser PDO pour connecter deux bases de données MySQL et copier la structure de l'une des tables.
// Se connecter à la base de données source
$sourceHost = 'source_host';
$sourceDB = 'source_database';
$sourceUser = 'source_username';
$sourcePass = 'source_password';
$sourceDbh = new PDO("mysql:host=$sourceHost;dbname=$sourceDB", $sourceUser, $sourcePass);
// Se connecter à la base de données cible
$targetHost = 'target_host';
$targetDB = 'target_database';
$targetUser = 'target_username';
$targetPass = 'target_password';
$targetDbh = new PDO("mysql:host=$targetHost;dbname=$targetDB", $targetUser, $targetPass);Une fois la connexion terminée, nous pouvons interroger la structure de la table de la base de données source et créer la même table dans la base de données cible.
$table = 'source_table';
// Structure de la table de requête
$stmt = $sourceDbh->query("SHOW CREATE TABLE $table");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
// Créer une table dans la base de données cible
$targetDbh->exec($result['Create Table']);De cette manière, la structure des tables de la base de données source est entièrement copiée dans la base de données cible.
Ensuite, nous montrons comment migrer les données de la table, c'est-à-dire exporter et importer les données de la table de la base de données source vers une nouvelle table de la base de données cible.
// Supprimer les anciennes tables de la base de données cible
$targetDbh->exec("DROP TABLE IF EXISTS new_table");
// Sélectionnez les données de la base de données source
$stmt = $sourceDbh->query("SELECT * FROM source_table");
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
// Insérer des données dans une nouvelle table de la base de données cible
$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)");
}Après avoir exécuté le code ci-dessus, toutes les données de la table de la base de données source seront migrées avec succès vers la nouvelle table de la base de données cible. Il est à noter que la structure des champs de la table cible doit être cohérente avec la table source, sinon une erreur d'insertion se produira.
En utilisant PHP et PDO, vous pouvez facilement copier et migrer des tables de base de données. Qu'il s'agisse de migrer l'intégralité de la structure des tables ou d'importer des données par lots, PDO fournit une interface unifiée et sécurisée. Les développeurs peuvent ensuite étendre leurs capacités à des scripts de migration automatisés ou à des outils de sauvegarde de bases de données en fonction des besoins du projet.
Une utilisation appropriée de PDO peut non seulement améliorer l'efficacité des opérations de base de données, mais également rendre le code plus sécurisé et plus maintenable.