Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Non-Officiels > Programmation > C > Utiliser l'API MySQL dans vos programmes > Lecture des commentaires

Utiliser l'API MySQL dans vos programmes

Vous devez être inscrit pour pouvoir poster des messages

Page : 1  2  Suivante
Pseudo Commentaire
Page : 1  2  Suivante
Hors ligne Ares # Posté le 13/10/2006 à 17:02:44 - Ce membre a mis la note : 17
Recognized Programmer
Avatar
Groupe : Membres
Excellent tuto :)

Cependant, j'aimerais savoir quel est le nom de cette fonctionnalité dans les hebergeurs (phpinfo ?).

Pasque c'est bien beau mais si on sait pas où l'utiliser... ^^

Secret (cliquez pour afficher)
17/20
Hors ligne nestor # Posté le 18/10/2006 à 12:33:23 - Ce membre n'a pas mis de note
Avatar
Groupe : Membres
Bonjour,
tu expliques comment faire pour se connecter à une BDD sur internet, liée à un site, mais pas à une BDD locale. Est que c'est impossible ou as-tu préféré passer cet aspect de la question sous silence ?

Si ce n'est pas impossible, pourrais-tu m'indiquer où me renseigner pour le faire ?

Merci d'avance
Hors ligne The BasheR # Posté le 18/10/2006 à 14:46:25 - Ce membre n'a pas mis de note
Quand on veut on peut!
Avatar
Groupe : Membres
Eh bien en fait je ne me suis pas vraiment posé la question pour la connexion en local, mais je suppose (ce n'est qu'une supposition) qu'on peut le faire aussi, il suffirait selon moi de changer les infos de connexion en mettant ceux de ta BDD en local (mais dans ce cas la librairie winsock n'est plus indispensable puisqu'on ne se connecte plus à internet)
Donc en gros il faudrait tester comme ça et voir si ça marche. Si ce n'est pas le cas c'est qu'on ne peut pas le faire.
 
Hors ligne JonathanMM # Posté le 12/11/2006 à 23:10:27 - Ce membre n'a pas mis de note
Si tu es un bon 0, tape sur 0
Avatar
Groupe : Membres
Bonjour, j'aimerais savoir comment faire pour verifier si un pseudo est dans une base de données, qui si oui renvoi 1, sinon renvoi 0; et même chose pour si un pseudo correspond a un mot de passe
Merci d'avance ! :D
 
Hors ligne The BasheR # Posté le 13/11/2006 à 19:05:23 - Ce membre n'a pas mis de note
Quand on veut on peut!
Avatar
Groupe : Membres
Eh bien à vrai dire je ne me suis encore jamais penché sur le sujet, pour le moment j'ai juste appris à me servir de l'API MySQL mais je n'ai pas encore vraiment fait de programme l'utilisant, ceci dit je présume qu'il faut faire comme en PHP où on vérifie une égalité dans la requête, cependant je ne saurais pas te dire si le fait de vérifier l'égalité avec un tableau fausse tout ou non. Pour le savoir je te conseille de tester ou de te renseigner plus à ce sujet. Dans ce tuto je n'ai fait qu'apprendre les bases.
Voilà j'espère t'avoir aidé un peu ou t'avoir mis sur la bonne voie, si ce n'est pas le cas j'en suis désolé mais je ne peux t'aider plus pour le moment.

++
 
Hors ligne SubX # Posté le 16/11/2006 à 21:42:26 - Ce membre a mis la note : 18
Modelisateur amateur
Avatar
Groupe : Membres
c'est interressant mais ca veut il dire que sa enregistre sur internet comme un script classique.
Si oui on peut faire tout les script du monde

Mon site
Image utilisateurEven if you're not with me I'm with you

Pour toute demande d'engagement dans un projet (quel qu'il soit), la reponse est non, jusqu'au changement de cette phrase ;)
 
Hors ligne The BasheR # Posté le 16/11/2006 à 21:43:57 - Ce membre n'a pas mis de note
Quand on veut on peut!
Avatar
Groupe : Membres
Oui c'est le cas, ça enregistre comme sur internet car on utilise aussi une BDD, ....
 
Hors ligne mleg # Posté le 27/11/2006 à 21:41:36 - Ce membre n'a pas mis de note
None
Groupe : Membres
Citation : The BasheR
Alors expliquons là: tout d'abord il y a %.*s, en fait ce n'est pas très compliqué ça veut tout simplement dire, comme on ne sait pas de quel type sera la valeur, que l'on veut tous les types.
Ensuite on a (int) lengths[i], row[i] ? row[i] : "NULL", en gros ça veut dire qu'on va afficher la valeur de row en faisant attention à la taille, et si row est NULL alors on affiche rien.


Hum, bien confus tout ça. :p

Analysons tout ça en détail...

D'abord, la chaîne de conversion de printf(). La chaîne de conversion %.*s est assez austère, il faut l'avouer. Cependant, en prenant les éléments un par un, on arrive à la comprendre sans problème.

Je passerai sur le '%', je crois que ce n'est pas la peine de s'éterniser dessus. :-°

Ensuite vient le point. Il sert à séparer un nombre éventuel indiquant la largeur du champ et la précision désirées. Par exemple, avec %10.20s, on aura une largeur de champ de 10 et on écrira au maximum 20 caractères (spécificateur %s).

Puis, le plus déroutant parce qu'il est rare, l'étoile. Elle désigne en fait la valeur du second argument passé à printf(), qui doit être un int (d'où le cast ). Ainsi, l'appel à printf() suivant (tiré du K&R) :

printf("%.*s, max, s);

... signifiera : "imprimer sur stdout au plus max caractères de la chaîne s".

Je vous épargne l'adaptation à notre propre cas, si vous m'avez suivis jusque là il ne devrait pas y avoir de problème.

Ensuite, la condition ternaire. Elle est un peu ambigüe. Personnellement, je la trouve un peu douteuse. A prendre avec des pincettes.

Voici son équivalent sous forme classique :

Code : C
if (row[i])
    printf("%.*s", (int) lengths[i], row[i]);
else
    printf("NULL");


Or, selon la doc, mysql_fetch_row() est censée renvoyer NULL en cas d'erreur ou de fin de jeu. C'est ici que se pose le problème. En effet, NULL est généralement implémenté ainsi :

#define NULL (void *) 0

auquel cas la condition est parfaitement valable.

En revanche, rien ne garantit (du moins il me semble) que sur certains systèmes, NULL ne soit pas égal à une autre valeur que 0. Cela provoquerait un bug important.

Voilà tout. J'espère que mes précisions auront été utiles. ;)

++.
 
Hors ligne The BasheR # Posté le 28/11/2006 à 14:07:07 - Ce membre n'a pas mis de note
Quand on veut on peut!
Avatar
Groupe : Membres
Merci pour cette information, je viens de mettre le tutorial à jour, il est maintenant en attente de revalidation ^^ (en fait j'ai ajouté ce que tu as dis et j'ai mis un petit merci ^^ )

++
 
Hors ligne mleg # Posté le 03/12/2006 à 14:01:24 - Ce membre n'a pas mis de note
None
Groupe : Membres
Dorien ! ;)
 
Hors ligne madevilts # Posté le 31/01/2007 à 10:31:44 - Ce membre n'a pas mis de note
Mad Scripting
Avatar
Groupe : Membres
J'ai utilisé ton code mais... ca ne marche pas :( :euh:


Code : C
int main(int argc, char *argv[])
{
        MYSQL mysql;
        mysql_init(&mysql);
        mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"option");

        if(mysql_real_connect(&mysql,"intranet","al_attanasio_d","d011206","portail",0,NULL,0))
        {
                        printf("Base MySQL connectée\n");
                        mysql_query(&mysql,"SELECT IT_LIBELLE FROM ITINERAIRE");
                       
                        MYSQL_RES *result = NULL;
                        MYSQL_ROW *row = NULL;
                        int num_champs;
                        result = mysql_use_result(&mysql);
                        num_champs = mysql_num_fields(result);
                        row = mysql_fetch_row(result);
                        if (row)
                        {
                                printf("Valeur ITI_LIBELLE : %s\n",row[0]);
                        }

[...]


Et voila ce qu'il me dit :
27 U:\distancier_sql\main.c [Warning] assignment from incompatible pointer type

Il est question de la ligne Code : C
row = mysql_fetch_row(result);


EDIT : J'ai pu compiler en changeant cette ligne :
Code : C
MYSQL_ROW *row = NULL;


en cette ligne :
Code : C
MYSQL_ROW row;



Par contre, quand je lance le programme... l'exec plante a mysql_fetch_row :(
En recherchant un peu pourquoi... a ben oui : tu ne vérifies pas si mysql_use_result retourne un résultat. S'il n'y en pas, mysql_fetch_row plante (logique). ;)

MaDeViLtS :diable:
 
Hors ligne The BasheR # Posté le 31/01/2007 à 12:03:36 - Ce membre n'a pas mis de note
Quand on veut on peut!
Avatar
Groupe : Membres
Oui c'est vrai j'ai oublié de le préciser mais in faut en effet vérifier si la fonction retourne un résultat (comme pour les fichiers en gros: quand on l'ouvre on vérifie qu'il soit bien ouvert)

Merci de la remarque je vais modifier ce passage :)
 
Hors ligne Simgurdil # Posté le 13/02/2007 à 10:22:52 - Ce membre a mis la note : 19
Mobilis in Mobile
Avatar
Groupe : Membres
Excellent tuto.
C'est dingue ce qu'on peut faire une fois avoir établie une liaison BDD -> C++ :D

Merci beaucoup ! :)


P.S : Je met 19.

Image utilisateur


Mon site sur la construction d'un modèle réduit de sous-marin RC :
www.sub-rc.c.la
 
Hors ligne NarTy # Posté le 23/02/2007 à 10:48:57 - Ce membre a mis la note : 18
Je t'aime amèrement !
Avatar
Groupe : Bannis
Je suis ..... SUPER MAN CONTENT !
Voila un tuto simple clair et concis , mais sans etre exhaustif ,c'est un tres bon tuto , a noter qu'il s'adresse aux programmeurs ayant deja fait du SQL !
Je mets 18

Venez jouer
Mon blog => JuLeS’ ProGs
Programmeur xHTML/CSS,PHP/SQL,Javascript,C à votre service

 
Hors ligne -ed- # Posté le 25/02/2007 à 10:56:34 - Ce membre n'a pas mis de note
C is a sharp tool
Avatar
Groupe : Membres
Salut,

Je tiens à préciser que pour les applications simples (mono client) SQLite est plus que suffisante... Pas de serveur, la BdD est incorporée à l'application, le fichier de données est sur le disque.

http://www.sqlite.org/

A+
Emmanuel

Emmanuel Delahaye.
Non à la pub sur l'alcool sur Internet.

Des infos sur la programmation et le langage C:
http://bien-programmer.blogspot.com/
http://mapage.noos.fr/emdel/


Image utilisateur
 
Hors ligne Neolite # Posté le 26/02/2007 à 22:39:08 - Ce membre n'a pas mis de note
Avatar
Groupe : Membres
Boujour moi j'ai un problème y me met tout le temps "Une erreur s'est produite lors de la connexion à la BDD!" donc la ca va pas du tout... J'ai pourtant bien vérifié mot de pass et tout mais rien ne vas !!! Je suis sous windows et j'ai mis le programme dans les exceptions de mon pare-feu parce qu'il me met pas le message de déblocage !

Merci de votre aide.
Hors ligne The BasheR # Posté le 27/02/2007 à 11:33:13 - Ce membre n'a pas mis de note
Quand on veut on peut!
Avatar
Groupe : Membres
Pourrais tu nous montrer ton code?
 
Hors ligne PY # Posté le 28/03/2007 à 05:33:34 - Ce membre a mis la note : 17
c++ powa!
Avatar
Groupe : Membres
Tutoriel très interessant qui offre plein de possibilités, j'en ferai bon usage. Pour ma part, je note 17/20.

  • Quelques fautes de français (principalement de ponctuation)
  • Réafficher toujours le code d'exemple au complet devient un peu déroutant à la longue.

Très bon travail, continue!

Better to die on your feets than to live on your knees.
-Emiliano Zapata
 
Hors ligne Raziax # Posté le 17/04/2007 à 10:14:35 - Ce membre n'a pas mis de note
Groupe : Membres
Merci pour tout! ce tuto c'est de l'or pour mon projet, je cherche juste encore comment utiliser ca pour mes requetes:
mysql_query(&mysql,"SELECT * FROM client WHERE NomClient=%s",nom); vous vous en doutez bien ca marche pas quand je rentre au préalable un nom dans nom... si qqun à la réponse :)
Hors ligne gui901 # Posté le 18/04/2007 à 13:34:55 - Ce membre n'a pas mis de note
Groupe : Membres
Très bon tutoriel. Je mets 17/20.

Un point de détail: au début tu expliques qu'il faut créer un pointeur MYSQL puis qu'il faut utiliser les deux fonctions:
_ mysql_options,
_ mysql_real_connect,

Et là, paf! une fonction "mysql_init(&mysql)" est écrite dans ton code sans qu'on sache pourquoi! Evidemment, tu as prévenu: il faut avoir au moins été jusqu'à la partie SDL du tuto de M@teo21 et donc tes lecteurs doivent un peu connaitre les init, mais c'est un peu surprenant!

D'autres commentaires suivront quand j'aurais enfin réussi à me connecter à une de mes bases de données... :(

Cordialement.
Hors ligne The BasheR # Posté le 18/04/2007 à 15:09:55 - Ce membre n'a pas mis de note
Quand on veut on peut!
Avatar
Groupe : Membres
Eh bien pourtant j'ai écrit entre les 2:

Citation : The BasheR
Puis initialisons MySQL, la fonction pour faire ça est tout simplement: mysql_init(MYSQL *mysql);.


Sinon oui n'hésite pas à envoyer des commentaires.
 
Hors ligne Rini # Posté le 22/04/2007 à 17:45:33 - Ce membre a mis la note : 18
urk ?!
Groupe : Membres
Très intéressant ce tutorial,vraiment simple et clair c'est ce que je cherchais néanmoins je tenais à réagir sur le fait que la portabilité Windows->Linux ne pose aucuns soucis !
Pour linker l'api sous linux il suffit d'utiliser -lmysqlclient ( ex : gcc -o prog_mysql main.c -lmysqlclient ) voilà c'est tout simple :)
Pour le header c'est le même sous Linux que sous Windows ;)

Nous sommes soit 1 soit 0 soit vivant soit mort,notre monde est binaire.

 
Hors ligne The BasheR # Posté le 29/04/2007 à 22:27:14 - Ce membre n'a pas mis de note
Quand on veut on peut!
Avatar
Groupe : Membres
Exacte, en fait au début je pensais que cette bibliothèque réseau n'était pas portable, mais j'ai appris que si ^^
 
Hors ligne Platost # Posté le 10/06/2007 à 01:26:45 - Ce membre n'a pas mis de note
Groupe : Membres
Bonjour,

Après avoir lu attentivement le tutorial j'ai voulu tester les exemples proposés et je ne me suis confronté à aucune erreur de compilation mais le programme ne se lance pas pour autant.
Quand je lance l'exécutable rien ne s'affiche pas même une fenêtre msdos et aucune modification n'a lieu dans la base de donnée.
J'ai d'abord cru que cela venait de free mais il s'avère qu'en local également rien ne se lance et même en mettant des infos ce connexion bidon le résultat est le même.

Apparement il y a certaines personnes qui ont réussi à faire fonctionner le programme, avez-vous été confronté à ce genre de problème ?

Problème résolu : il se trouve qu'en commençant mon projet j'avais choisi "Windows application" comme type alors que pour que ça fonctionne il fallait sélectionner "Console Application".

Tutorial très util, je lui donne 18 :-)
Hors ligne mick009 # Posté le 23/06/2007 à 19:39:28 - Ce membre n'a pas mis de note

Avatar
Groupe : Membres
Tout d'abord comme à peu près tout ceux qui ont fait des tuto je leur met 20/20 car ils ont eu le courage de le faire et de le compléter (pas comme moi :lol: )

Ensuite, un peu plus haut, on te pose une question dont la réponse m'interesse également :

"Comment on fait pour dire un WHERE comme PHP. Exemple : "SELECT login, password FROM Membres WHERE login = 'truc' "

Ceci ne marche pas car à la fin on me retourne 2 alors qu'il n'ya aucune entré contenant le login 'truc' !!! o_O

Merci d'avance de pouvoir m'éclairer sur cette situation ^^

Secret (cliquez pour afficher)
:diable: C'est diaboliquement efficace :diable:
 
Hors ligne Marcus # Posté le 05/07/2007 à 00:58:28 - Ce membre a mis la note : 19
Avatar
Groupe : Membres
Bravo pour ce tutoriel très intéressant. C'est vrai qu'il est utile des fois de pouvoir manipuler une base depuis son programme (je sens que je vais me faire un cht'it système de meilleurs scores online moi ! :p )

Merci beaucoup. 19/20 ;)

Je tiens quand même à signaler un petit défaut que j'ai pu constater en lisant la doc MySQL ultérieurement : c'est qu'il faut libérer les jeux de résultats une fois qu'on a fini de les utiliser avec la fonction mysql_free_result() ;)
 
Hors ligne The BasheR # Posté le 05/07/2007 à 18:21:58 - Ce membre n'a pas mis de note
Quand on veut on peut!
Avatar
Groupe : Membres
mick009 => Pourrais tu me détailler un peu plus ton probleme par MP? Car là je ne vois pas bien ce qui
cloche.

Marcus => Merci de l'info je vais mettre ça en plus dès que je pourrai :)
 
Hors ligne Rini # Posté le 19/07/2007 à 22:53:13 - Ce membre a mis la note : 18
urk ?!
Groupe : Membres
Si j'ai bien saisis le problème de Mick009,il n'arrive pas à récup' la valeur de login,j'ai eu le meme problème que lui ey j'ai trouvé :D :D .

Code : C

    if(mysql_real_connect(&co_db,"localhost","root","*****","ma_base",0,NULL,0))

    {       

        mysql_query(&co_db,"SELECT * FROM account");

        MYSQL_RES *result = 0;

        MYSQL_ROW *row = 0;

       

        result = mysql_use_result(&co_db);

        n = mysql_num_fields(result);

       

        while(row = mysql_fetch_row(result))

        {

            for(i = 0;i < n;i++)

            {     

                if(row[i])

                {

                    sprintf(check_log,"%s",row[i]);

                    sprintf(check_pass,"%s",row[i]);

                }

                else

                {

                    printf("Aucunes valeurs n'a ete trouvees\n");

                    return 0;

                }

                             

                if(strcmp(check_log,gc_acc.login) == 0)

                    printf("Login accepte\n");

                if(strcmp(check_pass,gc_acc.password) == 0)

                    printf("Password accepte\n");

                else

                    printf("erreur");         

            }

         } 

    }
 


Normalement ca devrai marcher du moins chez moi ca marche nikel :) Après il y a pleins de moyens de modif le code mais c'est un "pseudo-code"

Nous sommes soit 1 soit 0 soit vivant soit mort,notre monde est binaire.

 
Hors ligne MeCaK # Posté le 08/09/2007 à 17:44:42 - Ce membre a mis la note : 18
Avatar
Groupe : Membres
Je viens de tester, et ça n'a pas marché avec mon hébergeur, mais avec goldzoneweb ou en local ça marche ...
J'ai donc utilisé mon ancien compte chez eux ;)

Je ne sais pas si c'est à cause de ma connexion, mais mon programme est devenue un peu plus lourd ...

Sinon bon tuto !
18
 
Hors ligne austin.fla # Posté le 20/12/2007 à 21:32:21 - Ce membre n'a pas mis de note
Avatar
Groupe : Membres
Je n'arrive à convertir mon code PHP qui est celui-ci :
Code : PHP - Afficher / masquer les numéros de ligne
  1. $result_messages = ('SELECT COUNT(id) FROM forum_messages WHERE showed=0 AND owner=forum_user['id']);
  2. $num_new_mp = result($result_messages);
  3.  
  4. if ($num_new_mp > 0)
  5.     echo '<a href="forum/pms_list.php"><strong>'.($num_new_mp == 1 ? $lang_pms['New message'] : sprintf($lang_pms['New messages'],$num_new_mp)).'</strong></a>';


Ce code va voir si le membre à reçu ou non un MP privée. Je voudrais que après si oui il à bien reçu un MP on affiche un petit message dans une nouvelle fenetre "Vous avez un nouveau message privée sur TooKite.".

Dans le programme...

Si vous pouvez m'aider ?
Merci.

J'aime le Kite ! :D

Mon statut MSN est : Image utilisateur

Image utilisateur
 

Vous devez être inscrit pour pouvoir poster des messages

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 156 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.0707s (0.0564s)