Faire plusieurs requete sql dans un programme

bucheman -  
kij_82 Messages postés 4260 Statut Contributeur -
bonjour je voudrais faire plusieurs requete sql dans mon programme mais la deuxieme ne veut pas marcher si vous savez pourquoi merci de repondre

/********************************************/
/*          Serveur avec fork en UDP        */
/* auteur: STB2680                          */
/* date: 13/10/2003                         */
/* objet: creation d'un serveur qui fait des*/
/*  fils pour l'aider a repondre au nombre  */
/*  de demande des clients. Ils recoivent 1 */
/*  message et le renvoie aux clients.      */
/********************************************/
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <time.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include "/usr/include/mysql/mysql.h"

#define MAXBUF 5000
#define MAXBUCH 500
#define MAX 500
#define PORT 25310

int main (int argc, char **argv)
{	
	MYSQL_ROW row;//contient le resultat de mysql_fetch_row
	MYSQL_ROW row2;
	MYSQL *mysql = NULL ;
	MYSQL *mysql2 = NULL ;
	int sqlquery,sqlquery2;
	MYSQL_RES *myResult=NULL ;//contient le resultat de mysql_use_result
	MYSQL_RES *myResult2=NULL ;//contient le resultat de mysql_use_result
	mysql = mysql_init(NULL);
	struct sockaddr_in server,client;
    char buf[MAXBUF];
    char tg[MAX];
	char buch[MAXBUCH];
	int buf_len, sk,n_sent,n_read,client_ln,pid,tg_len,boucle;
	int h,w,i,buch_len;

    if (argc != 1) 
	{
        printf("Usage: %s \n",argv[0]);
        exit(0);
    }
    

/* creation d'un socket
* IP protocol family(PF_INET)	
* UDP (SOCK_DGRAM)
*/
    
	
	if( (sk=socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP)) < 0 ) 
	{
        printf("Erreur de creation de socket !!!\n");
        exit(1);
    }

	printf("Affichage de l'identifiant de la socket : %d\n", sk) ;

    server.sin_family = AF_INET; /* protocole utilise */
    server.sin_addr.s_addr = INADDR_ANY; /*NOADDRY ANY-->@ du serveur c'est notre machine et non plus 1 @ IP */
    server.sin_port = htons(PORT); /* etabli le numero du port du serveur */



 //attribution de l'adresse du serveur au socket 
    if ( (i = bind(sk,(struct sockaddr *)&server, sizeof(server))) < 0 ) 
	{
        perror ("Erreur de bind sur le socket");
        exit(3);
    }


/* boucle infini ;-) */
    while(1)
    {
        buf[i] = '\0';
/* on attend une demande d'un client */
        client_ln = sizeof(client);
        printf("\nLe serveur attend une demande ...\n");
        n_read = recvfrom(sk,buf,MAXBUF,0,(struct sockaddr *)&client,&client_ln);
        if(n_read < 0) 
		{
                perror("Probleme de reception");
                exit(4);
        }
// creation du fils qui va gerer la requete
        if ((pid=fork()) == -1) 
		{
            perror("Erreur de creation de fils");
            exit(1);
        }
		#ifdef DEBUG
		printf("avant le fils\n");
		#endif
// on est dans le fils
        if (pid == 0)
        {
            printf("creation du fils ...\n");
			printf("Mon PID c'est : %u\n", getpid());
			printf("Le serveur a recu %d bytes: %s \n",n_read,buf);
//permet la connection ala base de données
			if (!mysql_real_connect(mysql,"artemis","perez","perez","tkd2005",0,NULL,0))
			{
				fprintf(stderr, "Impossible de se connecter à la base de données, erreur : %s\n",
				mysql_error(mysql));
			}
			#ifdef DEBUG
			printf("connection\n");
			#endif
//envoi la requete a la base et retourne un int 
			if(mysql_query (mysql, "SELECT Nom FROM Concurrents") != 0)
			{
				printf("process_query() failed");
    			return -1;
   			}
			#ifdef DEBUG
			printf("requete effectué\n");
			#endif
//initialise un jeu de resultat 
			if(  (myResult = mysql_use_result(mysql)) == NULL)
 			{ 
				mysql_error(mysql);
			}
			#ifdef DEBUG
			printf("avant la boucle\n");
			#endif
//envoi des concurrent au tatami
			for(w=0;w<=1;w++)
			{
	
				row = mysql_fetch_row(myResult);
    			sprintf (tg,"<3_%s>\n",row[0]);
				printf("%s\n",tg);
				tg_len = strlen(tg);
				n_sent = sendto(sk,tg,tg_len,0,(struct sockaddr *)&client,sizeof(client));
				if(n_sent < 0) 
				{
					perror("Probleme d'envoie de données\n"); 
					exit(5);
				}
				
			}
			printf("tout est bon\n");
			
			
			
			if(mysql_query (mysql,"SELECT Nom FROM Juges") != 0)
			{
				printf("process_query() failed2");
				mysql_error(mysql);
				return -1;
   			}
//initialise un jeu de resultat 
			if(  (myResult2 = mysql_use_result(mysql)) == NULL)
				mysql_error(mysql);
				
			#ifdef DEBUG
			printf("avant la boucle2\n");
			#endif
//envoi des juges au tatami
			for(h=0;h=4;h++)
			{
			
				row2 = mysql_fetch_row(myResult2);
				sprintf (buch,"<3_%s>\n",row2[0]);
				buch_len = strlen(buch);
				n_sent = sendto(sk,buch,buch_len,0,(struct sockaddr *)&client,sizeof(client));
				if(n_sent < 0) 
				{
					perror("Probleme d'envoie de données\n"); 
					exit(5);
				}
			}
			#ifdef DEBUG
			printf("a la fin\n");
			#endif
			mysql_close(mysql);
	
	
// mort du fils pour pas qui reboucle du while(1) !!!
			return(0);
			for (boucle = 0;boucle<MAXBUF;boucle++)
			{
				buf[boucle] = '\0';
			}
			client_ln = sizeof(client);
			printf("\nLe serveur attend le resultat ...\n");
			n_read = recvfrom(sk,buf,MAXBUF,0,(struct sockaddr *)&client,&client_ln);
			if(n_read < 0) 
			{
                perror("Probleme de reception");
                exit(4);
            }
			printf("Le serveur a recu %d bytes: %s \n",n_read,buf);
		}
	}
        printf("Le pere va se remettre en attente\n");
    // sinon on est dans le pere est on attend une nouvelle requete.

    
    return 0;
}





1 réponse

kij_82 Messages postés 4260 Statut Contributeur 857
 
Si je n'm'abuse, ton pere ne fais rien, donc quand ton fils meurt, le code du pere est écraser par rien, donc il s'arrete.

Voilà, je c pas si c ça mais c ce que j'ai trouvé.

Bonne chance

@++
0