Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & ODBC
PHP & ODBC Forum d'entraide sur ODBC avec PHP. Avant de poster -> FAQ ODBC
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/06/2008, 17h11   #1
Membre à l'essai
 
Inscription : février 2005
Messages : 304
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 304
Points : 22
Points : 22
Envoyer un message via MSN à oclone
Par défaut PHP/ODBC : fonction ODBC_COLUMN

Bonjour,
j'aimerais faire la copie d'une base de données Access vers une base de données MySql mais je n'arrive pas à utiliser la fonction : ODBC_COLUMN

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
// Chaîne utilisée pour la connection ODBC sans DSN
$connectionString = sprintf("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=%s;SystemDB=%s", $cheminDeMaBase,$cheminSecurite);
// Connexion à la base Access
$cnx_basicq = odbc_connect($connectionString, "dbadmin", "");
// Connexion MySql
$sql_cnx=mysql_connect("localhost", "root", "") ;	
//Création de la base de données MySql			
$bdd_sql = "export_access";	
mysql_query("CREATE DATABASE $bdd_sql",$sql_cnx);
//Connexion à la base de données Mysql
mysql_select_db($bdd_sql);
 
//partie qui ne fonctionne pas
$column_info=odbc_columns($cnx_basicq,"%","","une_table","%") ;
while (odbc_fetch_row($column_info)) {
            echo odbc_result_all($column_info);
        }
    } 
}
odbc_result_all($column_info) ne renvoi rien.

Pourtant c'est quasiment un copie collé d'un code que j'ai trouvé sur http://fr2.php.net/manual/fr/function.odbc-columns.php

J'ai essayé longtemps mais vraiment je ne vois pas :/

Merci de votre aide
oclone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2008, 20h44   #2
Membre habitué
 
Inscription : août 2006
Messages : 163
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 163
Points : 112
Points : 112
si ca peu aider, j ai fait un script pour faire l'import mais d'une base interbase vers mysql

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" > 
<head> 
 
<title>base de donnée</title> 
<meta http-equiv="Content-type" value="text/html; charset=UTF-8" />
<link rel="icon" type="image/gif" href="images/favicon.gif" /> 
<link href="style.css" rel="stylesheet" type="text/css"> 
</head> 
 
<body> 
<?php
header("Cache-Control: no-cache");
include ("tblnote.php");
#######################################################
#           SCRIPT DE CONVERSION DE BDD               #
#               INTERBASE -> MYSQL                    #
#             le 19/05/2008 par Gérald GAIGA                  #
 
#######################################################
#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 = 'SIC'; //nom du dsn
  $utilisateur = 'SYSDBA'; //User par défaut
  $passe ='syscreas'; //Pass par défaut
  $bdd_interbase = odbc_connect($hote, $utilisateur, $passe, 'IscDbc'); //Connexion
//PARAMETRES MYSQL
  $hote_mysql = 'localhost';
  $utilisateur_mysql = 'admin';
  $passe_mysql = '123456';
  $nom_mysql = 'test'; //Nom de la BDD MySQL
  mysql_query('DROP DATABASE test');
 mysql_query( 'CREATE DATABASE test');
 
  $bdd_mysql = mysql_connect($hote_mysql,$utilisateur_mysql,$passe_mysql);
  mysql_select_db($nom_mysql,$bdd_mysql);
 
#FIN PARAMETRES
//ON PARCOURT LA BDD INTERBASE
 
 
  //ON PARCOURT LA BDD INTERBASE
  $requete = 'SELECT DISTINCT rdb$relation_name FROM rdb$relation_fields
WHERE rdb$view_context IS NULL
';
  $resultat = odbc_do($bdd_interbase, $requete);
 
 
$result = odbc_columns($bdd_interbase, $hote, "","", "%");
 
 
  //Récupérer le noms des champs
  //Initialisation
$k=0;
//Connection
while ($ligne = odbc_fetch_array($resultat)) {
$result = odbc_columns($bdd_interbase, $hote, "", "%");
}
//Récupération du nom des colonnes
while (odbc_fetch_array($result)) {
 
  $tablechamp[$k]= odbc_result($result,"COLUMN_NAME");
 
 
  echo ($tablechamp[k]);
  $k++;
 
}
 
 
 
 
 
  //Boucle
  $i=0;
  while ($ligne = odbc_fetch_array($resultat)) {
 
    foreach ($ligne AS $table) {
 
    $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 = odbc_do($bdd_interbase,$req_struc_table);
   //initialisation
 
       //Construction de la requête de création de la table
 
 
 
 
       $req_create_table = "CREATE TABLE `".trim($table)."` (";
 
       while ($tab_struc_table = odbc_fetch_array($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; }
echo($tablechamp[$i]);
         $req_create_table .= "`".trim($tablechamp[$i])."` ".$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";
 
         }
$i++;
}
 
 
       $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);
 
       odbc_free_result($res_struc_table);
       $requete2 = 'SELECT * FROM '.$table; //On récupère les champs de la table et leurs valeurs
       $resultat2 = odbc_do($bdd_interbase, $requete2);
       while ($ligne2 = odbc_fetch_array($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);
 
      }
    }
  }
  odbc_free_result($resultat);
  execute();
  odbc_close($bdd_interbase);
?>
 
</body> 
</html>
gerald57 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2008, 10h29   #3
Membre à l'essai
 
Inscription : février 2005
Messages : 304
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 304
Points : 22
Points : 22
Envoyer un message via MSN à oclone
Je vois pas comment tu défini les clés primaire dans ton code?
oclone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2008, 15h55   #4
Membre habitué
 
Inscription : août 2006
Messages : 163
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 163
Points : 112
Points : 112
c'est normal ça ne les définit pas mais tu peux soit améliorer le script selon tes besoins soit rajouter les clefs primaires dans phpmyadmin
gerald57 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h59.


 
 
 
 
Partenaires

Hébergement Web