Accueil > > > CONVERTISSEUR INTERBASE -> MYSQL
CONVERTISSEUR INTERBASE -> MYSQL
Information sur la source
Description
Après avoir cherché un logiciel capable de faire des conversions de bases de données InterBase, je n'ai trouvé que des logiciels payants (et pas qu'un peu !). Pour une simple et unique conversion, c'est quand même un peu exagéré, j'ai donc préféré écrire moi même un script me permettant de le faire. Au passage je l'ai rendu suffisamment autonome pour pouvoir être publié et utilisé par d'autres, vu qu'il n'y a pas tant d'outils que ça traitant de InterBase ...
Source
- <?php
- #######################################################
- # SCRIPT DE CONVERSION DE BDD #
- # INTERBASE -> MYSQL #
- # le 08/11/2007 par Silk #
- # (trooper@libertysurf.fr) #
- #######################################################
-
- #FONCTIONS
- function TypeChamp ($champ,$taille) {
- switch ($champ) {
- case 7:
- return array('SMALLINT',$taille);
- break;
-
- case 8:
- return array('INT',$taille);
- break;
-
- case 16:
- return array('BIGINT',$taille);
- break;
-
- case 10:
- return array('FLOAT','');
- break;
-
- case 11:
- //return 'D_Float';
- return 'erreur';
- break;
-
- case 27:
- return array('DOUBLE','');
- break;
-
- case 9:
- //return 'Quad';
- return 'erreur';
- break;
-
- case 14:
- return array('CHAR',$taille);
- break;
-
- case 37:
- return array('VARCHAR',$taille);
- break;
-
- case 40:
- //return 'CString';
- return 'erreur';
- break;
-
- case 13:
- return array('TIME','');
- break;
-
- case 12:
- return array('DATE','');
- break;
-
- case 35:
- return array('TIMESTAMP','');
- break;
-
- case 261:
- return array('BLOB','');
- break;
- }
- }
- #FIN FONCTIONS
-
-
- #PARAMETRES
- //C'est ici que vous devez entrer les paramètres de connexions aux BDD InterBase et MySQL
- //Assurez-vous d'avoir un serveur InterBase (ex: Firebird) et MySQL (ex: EasyPHP, WAMP) en activité.
- //PARAMETRES INTERBASE
- $hote = 'localhost:C:\fichier.gdb'; //On se connecte au fichier (ici, il se trouve à la racine de C:)
- $utilisateur = 'SYSDBA'; //User par défaut
- $passe ='masterkey'; //Pass par défaut
- $bdd_interbase = ibase_connect($hote, $utilisateur, $passe, 'ISO8859_1'); //Connexion
- //PARAMETRES MYSQL
- $hote_mysql = 'localhost';
- $utilisateur_mysql = 'interbase';
- $passe_mysql = 'interbase';
- $nom_mysql = 'interbase'; //Nom de la BDD MySQL
- $bdd_mysql = mysql_connect($hote_mysql,$utilisateur_mysql,$passe_mysql);
- mysql_select_db($nom_mysql,$bdd_mysql);
- #FIN PARAMETRES
-
-
- //ON PARCOURT LA BDD INTERBASE
- $requete = 'SELECT DISTINCT rdb$relation_name FROM rdb$relation_fields
- WHERE rdb$view_context IS NULL
- AND rdb$system_flag = 0'; //Injection de la requête permettant de récupérer les tables
- $resultat = ibase_query($bdd_interbase, $requete);
- while ($ligne = ibase_fetch_assoc($resultat)) {
- foreach ($ligne AS $table) {
- echo "<br><b>".$table."</b><br>";
- $req_struc_table = 'SELECT *
- FROM rdb$relations rel
- JOIN rdb$relation_fields rel_field
- ON rel_field.rdb$relation_name = rel.rdb$relation_name
- JOIN rdb$fields field
- ON rel_field.rdb$field_source = field.rdb$field_name
- WHERE rel.rdb$relation_name = \''.$table.'\'
- ORDER BY rel_field.rdb$field_position, rel_field.rdb$field_name';
- $res_struc_table = ibase_query($req_struc_table);
- //Construction de la requête de création de la table
- $req_create_table = "CREATE TABLE `".trim($table)."` (";
- while ($tab_struc_table = ibase_fetch_assoc($res_struc_table)) {
- $struct_champ = TypeChamp($tab_struc_table['RDB$FIELD_TYPE'],$tab_struc_table['RDB$FIELD_LENGTH']);
- if ($prem) {
- $req_create_table .= " , ";
- } else { $prem = 1; }
- $req_create_table .= "`".trim($tab_struc_table['RDB$FIELD_NAME'])."` ".$struct_champ[0];
- if ($struct_champ[1]) {
- $req_create_table .= "(".$struct_champ[1].")";
- }
- if ($tab_struc_table['RDB$NULL_FLAG'] == 0) {
- $req_create_table .= " NULL";
- } else {
- $req_create_table .= " NOT NULL";
- }
- }
- $req_create_table .= ") ENGINE = MYISAM";
- unset($prem);
- mysql_query($req_create_table) or die ("Impossible de créer la table : ".mysql_error()."<br>Requete : ".$req_create_table);
- //echo "<br>";
- ibase_free_result($res_struc_table);
- $requete2 = 'SELECT * FROM '.$table; //On récupère les champs de la table et leurs valeurs
- $resultat2 = ibase_query($bdd_interbase, $requete2);
- while ($ligne2 = ibase_fetch_assoc($resultat2)) {
- //Construction de la requête d'insertion des données
- $req_insert = "INSERT INTO `".trim($table)."` SET ";
- foreach ($ligne2 AS $champ => $valeur) {
- if ($prem) {
- $req_insert .= " , ";
- } else { $prem = 1; }
- #Correction des valeurs texte
- $valeur = str_replace("\'","'",$valeur);
- $valeur = utf8_decode($valeur);
- $req_insert .= "`".$champ."`='".addslashes($valeur)."'";
- }
- unset($prem);
- mysql_query($req_insert) or die ("Insertion impossible : ".mysql_error()."<br>Requete : ".$req_insert);
- //echo "<br>";
- }
- ibase_free_result($resultat2);
- }
- }
- ibase_free_result($resultat);
- ibase_close($bdd_interbase);
- ?>
<?php
#######################################################
# SCRIPT DE CONVERSION DE BDD #
# INTERBASE -> MYSQL #
# le 08/11/2007 par Silk #
# (trooper@libertysurf.fr) #
#######################################################
#FONCTIONS
function TypeChamp ($champ,$taille) {
switch ($champ) {
case 7:
return array('SMALLINT',$taille);
break;
case 8:
return array('INT',$taille);
break;
case 16:
return array('BIGINT',$taille);
break;
case 10:
return array('FLOAT','');
break;
case 11:
//return 'D_Float';
return 'erreur';
break;
case 27:
return array('DOUBLE','');
break;
case 9:
//return 'Quad';
return 'erreur';
break;
case 14:
return array('CHAR',$taille);
break;
case 37:
return array('VARCHAR',$taille);
break;
case 40:
//return 'CString';
return 'erreur';
break;
case 13:
return array('TIME','');
break;
case 12:
return array('DATE','');
break;
case 35:
return array('TIMESTAMP','');
break;
case 261:
return array('BLOB','');
break;
}
}
#FIN FONCTIONS
#PARAMETRES
//C'est ici que vous devez entrer les paramètres de connexions aux BDD InterBase et MySQL
//Assurez-vous d'avoir un serveur InterBase (ex: Firebird) et MySQL (ex: EasyPHP, WAMP) en activité.
//PARAMETRES INTERBASE
$hote = 'localhost:C:\fichier.gdb'; //On se connecte au fichier (ici, il se trouve à la racine de C:)
$utilisateur = 'SYSDBA'; //User par défaut
$passe ='masterkey'; //Pass par défaut
$bdd_interbase = ibase_connect($hote, $utilisateur, $passe, 'ISO8859_1'); //Connexion
//PARAMETRES MYSQL
$hote_mysql = 'localhost';
$utilisateur_mysql = 'interbase';
$passe_mysql = 'interbase';
$nom_mysql = 'interbase'; //Nom de la BDD MySQL
$bdd_mysql = mysql_connect($hote_mysql,$utilisateur_mysql,$passe_mysql);
mysql_select_db($nom_mysql,$bdd_mysql);
#FIN PARAMETRES
//ON PARCOURT LA BDD INTERBASE
$requete = 'SELECT DISTINCT rdb$relation_name FROM rdb$relation_fields
WHERE rdb$view_context IS NULL
AND rdb$system_flag = 0'; //Injection de la requête permettant de récupérer les tables
$resultat = ibase_query($bdd_interbase, $requete);
while ($ligne = ibase_fetch_assoc($resultat)) {
foreach ($ligne AS $table) {
echo "<br><b>".$table."</b><br>";
$req_struc_table = 'SELECT *
FROM rdb$relations rel
JOIN rdb$relation_fields rel_field
ON rel_field.rdb$relation_name = rel.rdb$relation_name
JOIN rdb$fields field
ON rel_field.rdb$field_source = field.rdb$field_name
WHERE rel.rdb$relation_name = \''.$table.'\'
ORDER BY rel_field.rdb$field_position, rel_field.rdb$field_name';
$res_struc_table = ibase_query($req_struc_table);
//Construction de la requête de création de la table
$req_create_table = "CREATE TABLE `".trim($table)."` (";
while ($tab_struc_table = ibase_fetch_assoc($res_struc_table)) {
$struct_champ = TypeChamp($tab_struc_table['RDB$FIELD_TYPE'],$tab_struc_table['RDB$FIELD_LENGTH']);
if ($prem) {
$req_create_table .= " , ";
} else { $prem = 1; }
$req_create_table .= "`".trim($tab_struc_table['RDB$FIELD_NAME'])."` ".$struct_champ[0];
if ($struct_champ[1]) {
$req_create_table .= "(".$struct_champ[1].")";
}
if ($tab_struc_table['RDB$NULL_FLAG'] == 0) {
$req_create_table .= " NULL";
} else {
$req_create_table .= " NOT NULL";
}
}
$req_create_table .= ") ENGINE = MYISAM";
unset($prem);
mysql_query($req_create_table) or die ("Impossible de créer la table : ".mysql_error()."<br>Requete : ".$req_create_table);
//echo "<br>";
ibase_free_result($res_struc_table);
$requete2 = 'SELECT * FROM '.$table; //On récupère les champs de la table et leurs valeurs
$resultat2 = ibase_query($bdd_interbase, $requete2);
while ($ligne2 = ibase_fetch_assoc($resultat2)) {
//Construction de la requête d'insertion des données
$req_insert = "INSERT INTO `".trim($table)."` SET ";
foreach ($ligne2 AS $champ => $valeur) {
if ($prem) {
$req_insert .= " , ";
} else { $prem = 1; }
#Correction des valeurs texte
$valeur = str_replace("\'","'",$valeur);
$valeur = utf8_decode($valeur);
$req_insert .= "`".$champ."`='".addslashes($valeur)."'";
}
unset($prem);
mysql_query($req_insert) or die ("Insertion impossible : ".mysql_error()."<br>Requete : ".$req_insert);
//echo "<br>";
}
ibase_free_result($resultat2);
}
}
ibase_free_result($resultat);
ibase_close($bdd_interbase);
?>
Conclusion
Bien que le script soit déjà utilisable dans de nombreux cas, il reste encore pas mal de boulot à faire dessus, en particulier pour la création des tables qui ne gère pas les clefs primaires, auto incréments et autres joyeusetés de ce genre.
N'hésitez pas à l'améliorer si vous vous en sentez l'envie ;-)
Historique
- 08 novembre 2007 16:53:42 :
- Modif mineure.
- 08 novembre 2007 16:57:00 :
- Données persos ;)
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
psSql > mySql [ par Nico ]
Quelqu'un connaît-il un moyen de travailler avec les deux bases indifféremment avec php. (pour la même application)ou bien je doit tout traduire ??Mer
MySql config ? [ par holger ]
J'auyrai souhaiter savoir si il était possible de fairetourner MySql sur un ordi tout pourrit :PC 200Mx 48Mo Ram Edo sous Windows 95Merci,Un lyonnais
statistiques ,graphique, php et mysql [ par mouss ]
connaissez vous des exemples mettant en oeuvre une base de donnée mysql ,php permettant de créer des courbes, nuages de points sur une feuille html (p
PB update table mysql ! [ par lolo ]
Comment pourrai-je faire pour mettre à jour une table mysql par le biais d'un formulaire (parcourir ...*.cvs) et d'un fichier php d'update de table my
php et mysql [ par stephane ]
bonjour,j'ai des pb d'acces aux base de donnees, je suis sur free donc le 'host' est ftpperso.free.fr enfin ca c'est bon j'ai bien mis mon login et pa
php et mysql : les index s'affichent pas !!! [ par stephane ]
Voila, j'utilise cette procédure pour afficher les index d'une table (je suis deja connecté à la base de donnees) :$mode représente la table$rep=@mysq
problème de mise à jour de base de données [ par rildspael ]
Ben en fait maintenant j'ai refait ce code, je me suis concentré, j'ai tout analysé mais rien ne marche encore et je ne comprends pas : le voici :Donc
multi recherche mysql ??? [ par stephane ]
saluttout simplement je voudrai savoir comment effectuer une requete my sql dans toutes les tables (je pense que c'est faisable mais je ne sais pas co
MYSQL: cas désespéré [ par aidezmoi ]
Comment faire quand on a easyphp pour créer une table mysql? Je sais je suis nul, je viens de commencer le php.Et il y a des modifs à faire si on pass
cherche hebergeur PHP4 et MySQL [ par Fafouneou ]
Je recherche un hebergeur gratuit ou payant ( dans la limite de 50 frs par mois) avec 100 Mo et qui gere le PHP4 et MySQL merci d'avance ...Tout les g
|
Derniers Blogs
TECHDAYS PARIS 2010 : PLEINIèRE DERNIER JOURTECHDAYS PARIS 2010 : PLEINIèRE DERNIER JOUR par ROMELARD Fabrice
Cette session est la dernière pleinière de ces 3 jours de TechDays Paris 2010. Généralement, cette troisième journée est plus axée sur l'avenir vu par Microsoft. Après un retour sur l'avenir vu par la Science Fiction ou par ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|