Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
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 19/01/2011, 17h40   #1
Membre du Club
 
Avatar de acryline
 
Inscription : août 2006
Messages : 181
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 181
Points : 57
Points : 57
Par défaut Sauvegarde d'une BDD avec API C MySQL

Bonjour,

j'essaie de faire un utilitaire pour Windows pour gérer facilement la configuration d'une simulation OpenSim. J'ai déjà fait la version Linux, mais pour Windows c'est plus corsé. Je bute sur la sauvegarde de la base de données de la simulation.

J'ai trouvé l'Api C pour MySQL, je l'ai installé, j'arrive à lister les tables d'une base donc ça doit fonctionner. Mais je n'arrive pas à utiliser la requête
SELECT * INTO OUTFILE "'.$chemin.'" FROM maTable;
Aucun fichier sql ne se crée.

Voici le code de la fonction dans laquelle j'utilise cette requête avec la fonction mysql_query ().

La partie qui pose problème :
Code :
1
2
3
4
5
6
7
8
 
   FOR(i = 0; i < num_champs; i++)
   {
       sprintf(table1,"%.*s ", (int) lengths[i], row[i] ? row[i] : "NULL");
       snprintf(query, sizeof(query) - 1, "select * into outfile '%s' from %s;", path,table1);
       mysql_query(mysql,query);
       printf("%s, %s\n",path,table1);//test
    }
La fonction entière :
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
 
//==============================================
void BDDDump (GADGET * p_gadget, char* pathMysql,char *host,char *bdd, char *user, char *mdp)
{
   //Partie codée à partir du tuto API C Mysql
   // de The BasheR  sur le Site du Zéro
   MYSQL *mysql =NULL;
   const char * valeur;
   UNSIGNED int num_champs = 0;
   char table1[32], query[1024], path[256];
   int i;
 
   mysql = mysql_init(NULL);
   mysql_options( mysql,MYSQL_READ_DEFAULT_GROUP, valeur);
   IF(mysql_real_connect(mysql,host,user,mdp,bdd,0,NULL,0))
    {
        //Pour trouver toutes les TABLES 
         mysql_query(mysql, "SHOW TABLES");
        //Déclaration des pointeurs de structure
         MYSQL_RES *result = NULL;
         MYSQL_ROW *row = NULL;
         result = mysql_use_result(mysql);
         num_champs = mysql_num_fields(result);
        //chemin du fichier de sauvegarde
         strcpy(path,p_gadget->repSauvegarde);
         strcat(path,"\\");
         strcat(path,gtk_entry_get_text(p_gadget->Edit[2]));
         strcat(path,".sql");
 
        //Tant qu il y a encore un résultat ...
         while ((row = mysql_fetch_row(result)))
         {
            UNSIGNED long *lengths;
            // stockage de la taille dans le pointeur
             lengths = mysql_fetch_lengths(result);
            // boucle pour avoir la valeur de chaque champs
               FOR(i = 0; i < num_champs; i++)
               {
                   sprintf(table1,"%.*s ", (int) lengths[i], row[i] ? row[i] : "NULL");
                   snprintf(query, sizeof(query) - 1, "select * into outfile '%s' from %s;", path,table1);
                   mysql_query(mysql,query);
                   printf("%s, %s\n",path,table1);//test
               }
         }
         //Libération du jeu de résultat
         mysql_free_result(result);
         mysql_close(mysql);
    }
    else
    {
        BDDBackupMessage(p_gadget, i);
    }
}
Que dois-je faire pour que cette méthode fonctionne si c'est la bonne méthode ? Sinon y aurait-il une autre méthode peut-être plus simple pour faire une sauvegarde de base de données en langage C ? Merci pour vos réponses.
__________________
Pour s'informer vraiment, Arrêt Sur Images de Daniel Schneidermann :
http://arretsurimages.net
acryline est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2011, 16h14   #2
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
ya Process Monitor sous windows qui permet de voir passer les appels systemes pour la création de fichier. utile tu verras.

le coup du outfile direct en SQL, j'aime pas ça perso.
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 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 01h31.


 
 
 
 
Partenaires

Hébergement Web