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

 C Discussion :

Récupérer résultat d'une requête dans un tableau


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Par défaut Récupérer résultat d'une requête dans un tableau
    Bonjour,

    Je débute en C et j'ai une question débile mais je bloque débilement aussi dessus.
    Comment puis-je récupérer le(s) résultat(s) d'une requête SQL dans un tableau d'entier à une colonne?

    Merci d'avance

  2. #2
    Membre très actif
    Avatar de TheDrev
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 310
    Par défaut
    Bonjour,

    Premièrement il faut utiliser le bibliothèque et l'api fournis pour ton moteur de base de données (http://dev.mysql.com/doc/refman/5.0/en/c.html pour mysql). elle est a installer comme toutes bibliothèque C.

    Le C fonctionne comme un langage hôte, utilise un char[] ou char* contenant ta requête. Éventuellement précédé d'un COUNT ou d'une fonction de comptage de l'api si elle en a pour allouer la mémoire nécessaire.

    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
    MYSQL_ROW row;
    unsigned int num_fields;
    unsigned int i;
     
    num_fields = mysql_num_fields(result);
    while ((row = mysql_fetch_row(result)))
    {
       unsigned long *lengths;
       lengths = mysql_fetch_lengths(result);
       for(i = 0; i < num_fields; i++)
       {
           printf("[%.*s] ", (int) lengths[i],
                  row[i] ? row[i] : "NULL");
       }
       printf("\n");
    }

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Par défaut
    Honnêtement j'ai rien compris

    Voici ma fonction :

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    int testFTwithUsername (numFT, user)
    int numFT;
    t_buffer *user;
    {
      MYSQL *mysql,*sock;
    	MYSQL_RES *res;/* Structure représentant le résultat d'une requête */
    	MYSQL_ROW row;/* Structure représentant les types d'une ligne de données. Lignes obtenues en appelant mysql_fetch_row() */
    	
    	char *query, *pos, *str;
    	int j,i,nblignes;
    	int result_req_cmp[100];
    
    	/* Utilisateur ? */
    	if (!user->buf || !user->lg )
    	{
    		char *tmp;
    
    		tmp = "E fwcvs: no user\n";
    		envoiebuf(CLNTOUTPUT,tmp,strlen(tmp));
    		return 0;
    	}
    
    	/* Test de connexion SQL*/
    	if(mysql = mysql_init(NULL))
    	{
    		if (!(sock = mysql_real_connect(mysql,"localhost","smo","smo","bugSMO",0,NULL,0)))
    		{
    		  char *tmp;
    	
    			TRACE1("testFTwithUsername: Couldn't connect to mysql (%s)\n",mysql_error(mysql));
    			tmp = "E fwcvs: Couldn't connect to the database.\n";
    			envoiebuf(CLNTOUTPUT,tmp,strlen(tmp));
    			return 0;
    		} 
    	
    	  /* On lance la requête... */
    		query = malloc(256+user->lg);
    		sprintf(query,"SELECT bug_id FROM bugs b, users u WHERE b.affecte_a = u.user_id AND b.status = 2 AND u.login = '%s';", numFT);                      
    		
    		
    		
    		/* mysql_query() Exécute une requête SQL spécifiée en tant que chaîne terminée par un caractère nul.*/
    		if (mysql_query(sock,query))
    		{
    			char *tmp;
    			
    			TRACE2("TestFTwithUsername : Couldn't select to mysql (%s)\n  %s\n",mysql_error(mysql),query);
    			tmp = "E fwcvs: Couldn't find FT in the database.\n";
    			envoiebuf(CLNTOUTPUT,tmp,strlen(tmp));
    			free(query);
    			mysql_close(mysql);
    			return 0;
    		}
    		else
    		{
    		result_req_cmp = mysql_store_result(sock);
    		nblignes = mysql_num_rows(res);
    		
    		for (i=0; i<nblignes; i++)
    				  {
    		TRACE1("RES : %d", result_req_cmp[i]); 
    		// Sinon si la requête a été executée il faut la vérifier
    
    		}		free(query);
    		
    		/* mysql_store_result() est appelée pour chaque requête qui récupère des données avec succès, retourne un pointeur nul*/
    		/* si pas de résultat. mysql_num_rows() Retourne le nombre de lignes présentes dans le résultat */
    		res=mysql_store_result(sock);
    		if (!res || !(j=mysql_num_rows(res)) )
    		{
    			/* Le FT n'est pas bon */
    			return 0;
    		}
    						
    		/*Libère la mémoire allouée à un résultat avec mysql_store_result() */
    		mysql_free_result(res);
    		mysql_close(mysql);
    		return(1);
    	}
    	return(0);
    }
    J'ai mis en rouge la partie dont je veux "m'occuper" je veux dans le tableau result_req_cmp récupérer le résultat de la requête SQL (requête contenue dans query). Afin de parcourir ce tableau et de le comparer avec un numFT ...
    Mais je ne sais pas comment récupérer le RESULTAT de la requête dans un tableau ...

    Il faut que j'utilise mysql_fetch_row? De quelle manière ?
    Je ne comprend pas la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("[%.*s] ", (int) lengths[i], row[i] ? row[i] : "NULL");
    du code que vous avez cité

Discussions similaires

  1. [MySQL] Récupérer le résultat d'une requête dans un tableau à une seule dimension
    Par Robjerey dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 17/09/2014, 16h20
  2. [MySQL] Récupérer le résultat d'une requête dans un tableau
    Par Z20500 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 15/11/2008, 18h30
  3. [MySQL] récupérer le résultat d'une requête dans un tableau
    Par faty2 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 19/05/2007, 16h22
  4. [MySQL] Afficher le résultat d'une requête dans un tableau
    Par magobouli dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 26/02/2007, 14h41
  5. Réponses: 12
    Dernier message: 09/01/2007, 19h04

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