IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques Discussion :

Methode de traitement MySQL


Sujet :

Bibliothèques

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Par défaut Methode de traitement MySQL
    Salut à tous,

    Ca fait un bout de temps que je lis les tutos et les dossiers sur developpez mais c'est mon premier post ici.

    J'utilise en ce moment l'api mysql pour developper quelques applications de gestion de bases de données en ce moment, et je dois dire qu'un probleme arrive assez regulierement, l'erreur "MySQL server has gone away".
    En gros, j'ai un table avec 3000+ entrées dessus. Pour chacune de ces entrées je fais un traitement et une fois que ce traitement est fini je met à jour dans ma base la nouvelle valeur. Hors j'etablis une nouvelle connexion a chaque fois et je ne suis pas persuadé que ce soit la bonne methode.
    Un petit exemple en code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    int     main()
    {
      MYSQL         *mysql;
      unsigned int  i;
      int           nb;
      MYSQL_RES     *res;
      MYSQL_ROW     row;
     
      mysql = mysql_init(NULL);
      if (mysql_real_connect(mysql, "localhost", "", "", "", 0, NULL, 0))
      //connexion
      if (mysql_query(mysql, "SELECT champ FROM table") == 0)
        {
          res = mysql_use_result(mysql);
          if (res)
            {
              while ((row = mysql_fetch_row(res)))
                {
                  for (i = 0; i < mysql_num_fields(res); i++)
                    {
                      new = traiter_le_champ(row[i]);
                      update(row[i], new);
                    }
                }
              mysql_free_result(res);
            }
          else
            printf("Erreur : %s\n", mysql_error(mysql));
        }
      mysql_close(mysql);
      return (1);
    }
    void            update(char *champ, int new)
    {
       char         *req;
       MYSQL        *mysql;
     
       mysql = mysql_init(NULL);
       if (!(mysql_real_connect(mysql, "localhost", "", "", "", 0, NULL, 0)))
         printf("Impossible de se connecter a la base de donnees\n");
     
       req = (char *)malloc(sizeof(char) * (60 + my_strlen(url)));
       sprintf(req, "UPDATE portail SET nouvelle_valeur = '%d' WHERE champ = '%s'", new, chmp);
       if (mysql_query(mysql, req))
         printf("Erreur : %s\n", mysql_error(mysql));
       free(req);
       mysql_close(mysql);
    }
    Et regulierement, suivant le programme, mysql ne repond plus au bout d'un moment.
    Auriez vous une idée de comment parer à ce probleme ?
    Merci beaucoup et bonne journée

  2. #2
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Salut,

    C'est normal, les connexions inactives sont jartées par mysql au bout d'un moment.
    Essaye ceci
    http://dev.mysql.com/doc/refman/5.0/fr/mysql-ping.html

    Sinon, il doit yavoir moyen de configurer le timeout, quelquepart dans la conf de mysql (voir, dans les options de connexion via l'api)

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Par défaut
    salut gruik et merci de ta réponse,
    j'ai ajouté mysql_ping comme cela histoire de pinger le serveur et de tenter une reconnexion si il tombe, a chaque champ traité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                  for (i = 0; i < mysql_num_fields(res); i++)
                    {
                      new = traiter_le_champ(row[i]);
                      ping = mysql_ping(mysql);
                      update(row[i], new);
                    }
    Mais ça ne change rien
    Je vais regarder du coté du timeout du serveur, mais si quelqu'un à une autre idée...

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Par défaut
    salut,

    un petit up ?

  5. #5
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Salut,

    Je pense qu'il faut se reconnecter manuellement si mysql_ping retourne CR_SERVER_GONE_ERROR (il ne se reconnecte pas tout seul).

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Par défaut
    salut et merci pour ta réponse;
    j'ai éssayé en faisant comme cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                      ping = mysql_ping(mysql);
                      if (ping == CR_SERVER_GONE_ERROR)
                        {
                          mysql = mysql_init(NULL);
                          mysql_real_connect(mysql, "localhost", "pds", "Mbaed", "p\
    dsv2", 0, NULL, 0);
                        }
    mais rien de satisfaisant.
    Faut il faire ca différemment ?

    Merci

Discussions similaires

  1. [Débutant] Methode pour traitement de fichiers
    Par puke502 dans le forum C#
    Réponses: 16
    Dernier message: 18/10/2013, 17h00
  2. quel hebergeur choisir (beaucoup de traitement MySql et PHP)
    Par ajo12 dans le forum Administration
    Réponses: 2
    Dernier message: 24/11/2011, 17h27
  3. Réponses: 6
    Dernier message: 18/08/2006, 09h11
  4. [Php/MySql/Tpl]Methode ou Demarche pour créer WebSite
    Par Funraill.net dans le forum Langage
    Réponses: 8
    Dernier message: 14/10/2005, 12h46
  5. [MySql] temps de traitement interminable
    Par LE NEINDRE dans le forum Requêtes
    Réponses: 8
    Dernier message: 08/07/2005, 15h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo