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 :

[libmysql] requete sql sous linux


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 63
    Points : 42
    Points
    42
    Par défaut [libmysql] requete sql sous linux
    Bonjour je cherche à faire une fonction qui permet de faire des requete sql (sous mysql) en C. Je précise que je suis sous un environement linux (Fedora6). Comme je dois utilisé le fichier compilé sur un système embarqué, j'emploi un compilateur gcc spécial pour ce système embarqué comme ca je peux développer sur mon pc

    Voici le code que j'emploi :
    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
     
    #include <stdio.h>
    #include <mysql/mysql.h>
     
    #define MYSQL_HOST "127.0.0.1" 
     
    #define MYSQL_DB "mabase" 
     
    #define MYSQL_LOGIN "root" 
     
    #define MYSQL_PASSWD ""
     
    void requete(unsigned char *querry)
     
    {
     
    	MYSQL mysql; 
     
            MYSQL_RES *result; 
     
            MYSQL_ROW row; 
     
     
     
            mysql_init(&mysql);
     
            if (!mysql_connect(&mysql,'127.0.0.1','root','root')) { 
     
                    return -1; 
     
            } 
     
            if (mysql_select_db(&mysql,MYSQL_DB)) { 
     
                    mysql_close(&mysql); 
     
                    return -1; 
     
            } 
     
            mysql_query(&mysql,requete); 
     
            result = mysql_use_result(&mysql); 
     
            while((row = mysql_fetch_row(result))) { 
     
                    printf("%s",row[1]); 
     
                    fflush(stdout); 
     
            } 
     
            mysql_close(&mysql); 
     
            return 0; 
     
    }
    Il y encore du code dans le programme mais c'est cette partie qui nous intersse.
    Avec ca j'obtient comme erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    lcd.c: In function `requete':
    lcd.c:152: warning: implicit declaration of function `mysql_connect'
    lcd.c:152:35: warning: character constant too long for its type
    lcd.c:152:47: warning: multi-character character constant
    lcd.c:152:54: warning: multi-character character constant
    lcd.c:153: warning: `return' with a value, in function returning void
    lcd.c:157: warning: `return' with a value, in function returning void
    lcd.c:159: warning: passing arg 2 of `mysql_query' from incompatible pointer type
    lcd.c:166: warning: `return' with a value, in function returning void
    /home/powerdale/usr/local/opt/crosstool/arm-linux/gcc-3.3.4-glibc-2.3.2/bin/../lib/gcc-lib/arm-linux/3.3.4/../../../../arm-linux/bin/ld: skipping incompatible /usr/lib/mysql/libmysqlclient.so when searching for -lmysqlclient
    /home/powerdale/usr/local/opt/crosstool/arm-linux/gcc-3.3.4-glibc-2.3.2/bin/../lib/gcc-lib/arm-linux/3.3.4/../../../../arm-linux/bin/ld: skipping incompatible /usr/lib/mysql/libmysqlclient.a when searching for -lmysqlclient
    /home/powerdale/usr/local/opt/crosstool/arm-linux/gcc-3.3.4-glibc-2.3.2/bin/../lib/gcc-lib/arm-linux/3.3.4/../../../../arm-linux/bin/ld: cannot find -lmysqlclient
    collect2: ld returned 1 exit status
    Je compile avec cette ligne de commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ./arm-linux-gcc -Wall -o lcd lcd.c -L/usr/lib/mysql -lmysqlclient
    Voila j'aimerai savoir si :
    1. le code C est correcte
    2. si je fais bien le lien vers les librarie mysql car visiblement il trouve pas mysqlclient
    enfin si vous avez d'autres idées sur ce qui pourrait provoquer ce problème elles sont les bienvenue. Je peux aussi donnez plus d'explication si vous en avez besoin.
    Merci d'avance

    PS: je sais pas si je suis dans le bon forum car ca reprend des compétence de différents forums mais bon je penses que ca se rapproche le plus de celui-ci.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 35
    Points : 37
    Points
    37
    Par défaut
    Salut,

    Quelques idées:
    Première erreur de la compilation facile à régler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [...]lcd.c:153: warning: `return' with a value, in function returning void
    lcd.c:157: warning: `return' with a value, in function returning void
    lcd.c:159: warning: passing arg 2 of `mysql_query' from incompatible pointer type
    lcd.c:166: warning: `return' with a value, in function returning void[...]
    Je pense que ça ira mieux en déclarant ta fonction comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int requete(unsigned char *querry)
    Sinon pour l'erreur qui t'intéresse:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lcd.c:152: warning: implicit declaration of function `mysql_connect'
    Est-ce que le mysql.h se trouve avec les autres .h (/usr/include)? Essayes de rajouter dans la ligne de compilation un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     -I chemin_ou_se_trouve_mysql

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 63
    Points : 42
    Points
    42
    Par défaut
    oui en fait j'ai un peu changer le code que j'emploi car comme c'est un copilateur spécial que j'emploi il se trouve dans un autre repertoire et il possède un répertoire d'include pour lui donc j'ai mis directement le lien ou se trouvait mysql.h dans le code C

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 376
    Points
    376
    Par défaut
    Tous les warning

    lcd.c:152:35: warning: character constant too long for its type
    sont dus au fait que tu utilises le caractère ' comme délimiteur de chaines. ' est le délimiteur de caractères.

    Il faut donc que tu écrives:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_connect(&mysql,"127.0.0.1","root","root"

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 63
    Points : 42
    Points
    42
    Par défaut
    merci pour cette précision mais bon moi ce qui m'embete vraiment c'est cette erreur ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /home/powerdale/usr/local/opt/crosstool/arm-linux/gcc-3.3.4-glibc-2.3.2/bin/../lib/gcc-lib/arm-linux/3.3.4/../../../../arm-linux/bin/ld: cannot find -lmysqlclient
    Car je vois pas pq il l atrouve pas enfin en tant que tel lle existe pas mais je supose que c'est un lien vers les librairie mysql et q'uil va rechercehr des librairie tel que mysql.h qui elle existe dans le répertoire d'include.

  6. #6
    Membre confirmé Avatar de Lunixinclar
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 416
    Points : 489
    Points
    489
    Par défaut
    Salut,

    Désolé mais ce code est infâme.

    L'include, j'insiste sur ce qu'a noté Nemehy, il est dans /usr/include/mysql/mysql.h? ou dans le dossier de la source C?? Pour une réponse précise, il faut être précis.

    Pour l' édition de lien, que dit

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 63
    Points : 42
    Points
    42
    Par défaut
    bon ben voici le code exacte que j'ai mis pour les include

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #include <stdio.h>
    #include </home/powerdale/usr/local/opt/crosstool/arm-linux/gcc-3.3.4-glibc-2.3.2/include/mysql/mysql.h>
    Voila alors ce qu'il faut savoir c'est que comme j'emploi un compilateur spécial il a un répertoire spécifique pour ces includes j'ai donc copier l'entièreté du répertoire habituel pour les include dans le répertoire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /home/powerdale/usr/local/opt/crosstool/arm-linux/gcc-3.3.4-glibc-2.3.2/include
    Ou sinon le locate mysqlclient me donne ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    /usr/lib/mysql/libmysqlclient.a
    /usr/lib/mysql/libmysqlclient.so
    /usr/lib/mysql/libmysqlclient.so.15
    /usr/lib/mysql/libmysqlclient.so.15.0.0
    /usr/lib/mysql/libmysqlclient_r.a
    /usr/lib/mysql/libmysqlclient_r.so
    /usr/lib/mysql/libmysqlclient_r.so.15
    /usr/lib/mysql/libmysqlclient_r.so.15.0.0

Discussions similaires

  1. Recherche de requete sql sous access
    Par climz dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 15/05/2006, 09h16
  2. [sql]Probleme de count dans une requete sql (sous access)
    Par castelligreg dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 14/04/2006, 16h06
  3. Problème avec une requete SQL sous access
    Par Luther13 dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 14/12/2005, 10h39
  4. Débutant en SQL sous Linux
    Par DeVoN dans le forum Administration système
    Réponses: 4
    Dernier message: 01/12/2005, 15h22
  5. Optimiser une Requetes SQL sous ASP
    Par NeHuS dans le forum ASP
    Réponses: 8
    Dernier message: 18/04/2005, 16h26

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