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:
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 :king: