Faire plusieurs requete sql dans un programme
bucheman
-
kij_82 Messages postés 4260 Statut Contributeur -
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;
}
A voir également:
- Faire plusieurs requete sql dans un programme
- Programme demarrage windows - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
- Mettre en veille un programme - Guide
- Desinstaller un programme - Guide
- Comment faire un message programmé sur iphone - Guide