Faire plusieurs requete sql dans un programme
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;
}