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 10/05/2006, 17h17   #1
Nouveau Membre du Club
 
Inscription : juin 2005
Messages : 111
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : juin 2005
Messages : 111
Points : 33
Points : 33
Envoyer un message via ICQ à Alexlesilex Envoyer un message via MSN à Alexlesilex
Par défaut Comment mettre à jour 2 bases ayant des noms de champs différents ???

bonjour,

Voila mon probleme,

je souhaite recuperer le nom des champs que contient une table construite avec ACCESS.
Donc j'ai créé un lien ODBC vers cettte base et ensuite je m'y connecte via PHP comme ceci :

Code :
$connACCESS = odbc_connect("****","***","**") or die(" Impossible de se connecter à la base de données ACCESS");
ensuite je recupere le nom des tables avec ce code :

Code :
1
2
3
4
5
6
while($table2=mysql_fetch_row($result2)){
//liste des tables de la base ACCESS
 $resultACCESS = odbc_tables($connACCESS);
//tant que l'on n'arrive pas à la fin de la liste des table de la base ACCESS
 while (odbc_fetch_row($resultACCESS)){
    $tableACCESS=odbc_result($resultACCESS, 3);
ensuite je veux pouvoir recuperer le nom des champs de chaque table,
malheureusement le code que j'ai ecrit n'est pas bon car je me perd dans
le resultat que renvoi les fonction ( connection_id, result_id, ... ) je ne
sais plus quoi mettre.

voila le code qui ne marche pas :

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
if ($table2[0]==odbc_result($resultACCESS, 3)){
//liste des champs de la base ACCESS et nombre de champs
     $listchamps=odbc_columns($connACCESS);
     $nbchamp=odbc_num_fields($listchamps);
//sauvegarde des noms de champs de la base ACCESS et mysql pour pouvoir s'en servir dans les requêtes
     for ($i=1;$i<=$nbchamp;$i++){
        $tablo[$i]=odbc_field_name($listchamps, 4);
        echo "$tablo[$i]";print "<br />";}
     for ($i=0;$i<$nbchamp;$i++){
        $champ[$i]=mysql_field_name($table2[0],$i);}echo "$champ[1]";print "<br />";
//requête servant à selectionner les données des champs de la base ACCESS et exécution de la requête
     $req="select ";
     for ($i=0;$i<$nbchamp;$i++){
        $req=$req."$tablo[$i] ";}
     $req=$req."from $tableACCESS";
     $result3 = odbc_exec( $connACCESS,$req );
//boucle servant à remplir les tables MySQL avec les données de la requêtes précédentes
     while (odbc_fetch_row($result3))
       {
        for ($i=0;$i<$nbchamp;$i++){
          $tab[$i]=odbc_result( $result3, $i);}
        $query2="INSERT INTO $table2[0] (";
        for ($i=0;$i<$nbchamp-1;$i++){
          $query2=$query2."$champ[$i],";}
        $query2=$query2."$champ[$nbchamp]) VALUES ( ";
        for ($i=0;$i<$nbchamp-1;$i++){
          $query2=$query2."$tab[$i],";}
        $query2=$query2."$tab[$nbchamp])";
        $resultat2=mysql_query($query2,$conn2);}}}}
en fait j'ecris ce script afin de pouvoir vider toutes les tables d'une base
MySQL et de les remplir avec les donnees de la base ACCESS.

Voila, merci de m'aider et n'hesitez pas a poser de question si c'est pas clair
Alexlesilex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2006, 19h11   #2
Nouveau Membre du Club
 
Inscription : juin 2005
Messages : 111
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : juin 2005
Messages : 111
Points : 33
Points : 33
Envoyer un message via ICQ à Alexlesilex Envoyer un message via MSN à Alexlesilex
Bon en fait plus j'avance sur la question plus je me rend compte que ca va etre difficile de m'etre à jour la base MySQL a partir d'ACCESS mais bon il le faut quand meme.

Donc je pose une nouvelle question : Comment faire pour mettre à jour les
donnees contenues dans la base MySQL à partir de la base ACCESS ???
Alexlesilex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2006, 09h17   #3
Membre habitué
 
Homme Nicolas BUI
Consultant CRM
Inscription : mai 2006
Messages : 99
Détails du profil
Informations personnelles :
Nom : Homme Nicolas BUI
Âge : 35
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Consultant CRM
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2006
Messages : 99
Points : 145
Points : 145
Envoyer un message via Skype™ à nicolas.bui
Ben la tu as un leger probleme de style de programmation.

Fait comme si tu bossais en C/Java :
- Declare tes variables de maniere explicite et claire.
- Commente ton code (ca aide à la comprehension aussi bien pour nous que pour toi)

Car ce que tu fait est tres simple. Il s'agit de migrer une/des table(s) Access vers MySQL.
L'algo est simple alors.
1/ je recup les données et nom de champs de table Access
2/ Je creer ces tables sous MySQL au besoin (si les tables ont le meme noms)
3/ creer les requetes d'insertion dans la base MySQL

Donc ton bout de code de recup des noms de champs sur mysql ne sert pas a grand chose.
C'est ton code de recup de champs d'acces qui est utile déjà
__________________
Nicolas BUI
nicolas.bui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2006, 12h25   #4
Nouveau Membre du Club
 
Inscription : juin 2005
Messages : 111
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : juin 2005
Messages : 111
Points : 33
Points : 33
Envoyer un message via ICQ à Alexlesilex Envoyer un message via MSN à Alexlesilex
Bon c'est vrai que mon code est moche

Mais bon je voulais d'abord programmer et apres refaire une mise en forme avec commentaire.

Sinon je suis d'accord dans le fait que le code parait simple mais le probleme viens des requêtes en MySQL car on ne peut pas requêter des champs conposé d'espace et d'accent.
Et le probleme est que pratiquement tous les champs de la base ACCESS sont écrit avec des espaces et des accents.
D'où mon probleme.
Il est vrai que faire migrer des tables est simple mais c'est ensuite surtout un probleme de requete.
car en fait mon script s'executerai au lancement de l'application comme mise a jour afin que les données soient continuellement rafraichis car
la personne qui va utiliser cette application mettra à jour seulement la base ACCESS donc voila.
Alexlesilex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2006, 13h31   #5
Membre habitué
 
Homme Nicolas BUI
Consultant CRM
Inscription : mai 2006
Messages : 99
Détails du profil
Informations personnelles :
Nom : Homme Nicolas BUI
Âge : 35
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Consultant CRM
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2006
Messages : 99
Points : 145
Points : 145
Envoyer un message via Skype™ à nicolas.bui
Pense à utiliser mysql_escape ou mysql_real_escape pour te proteger des problemes avec les caracteres speciaux.

Code :
$s = "INSERT ... VALUES( '" . mysql_real_escape( "J'ai des trucs bizaroid\n\t"). "'";
__________________
Nicolas BUI
nicolas.bui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2006, 15h32   #6
Nouveau Membre du Club
 
Inscription : juin 2005
Messages : 111
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : juin 2005
Messages : 111
Points : 33
Points : 33
Envoyer un message via ICQ à Alexlesilex Envoyer un message via MSN à Alexlesilex
je suis vraiment désolé. J'ai parlé un peu trop vite, en fait on peut requêter même avec des caractères spéciaux.
La honte

je ne connaissai pas l'utilisation des `` en mysql , je ne savais pas que ça permettait de lire le nom de champs dans son intégralité ( avec ou sans caractère spéciaux ).

Désolé pour le dérangement.

Juste pour savoir, pourrais-tu m'en dire plus sur mysql_escape et mysql_real_escape si c'est possible ou si tu aurais de la doc.

merci tout de meme de m'avoir repondu.
Alexlesilex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2006, 17h08   #7
Membre habitué
 
Homme Nicolas BUI
Consultant CRM
Inscription : mai 2006
Messages : 99
Détails du profil
Informations personnelles :
Nom : Homme Nicolas BUI
Âge : 35
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Consultant CRM
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2006
Messages : 99
Points : 145
Points : 145
Envoyer un message via Skype™ à nicolas.bui
ben mysql_escape ou mysql_real_escape ca fé le boulot de transformer une chaine destiné a etre enregistrer pour que cela soit conforme au SQL.
les caracteres spéciaux qu'il converti sont :
' -> les simples quote
\n -> les retours a la ligne
etc..
__________________
Nicolas BUI
nicolas.bui est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h16.


 
 
 
 
Partenaires

Hébergement Web