# Mysql et C (débutant)\[Résolu\]

**URL:** <https://www.debian-fr.org/t/mysql-et-c-debutant-resolu/11770>\
**Category:** Programmation\
**Created:** [Février 20, 2016, 5:02 UTC](https://www.debian-fr.org/t/mysql-et-c-debutant-resolu/11770 "2016-02-20T17:02:32Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![arno3628fr](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/ea5d25/32.png) [@arno3628fr](https://www.debian-fr.org/u/arno3628fr)\
**Post date:** [Février 20, 2016, 5:02 UTC](https://www.debian-fr.org/t/mysql-et-c-debutant-resolu/11770/1 "2016-02-20T17:02:32Z")

</div>

Bonjour,  
je cherche à me connecter à une base de données Mysql par un petit programme en C. Dans un éditeur de texte, j’ai tapé le code suivant:[code]  
#include \<stdio.h\>  
#include \<mysql/mysql.h\>  
#include \<stdlib.h\>

int main(void)  
{  
MYSQL \*mysql;  
MYSQL\_RES \*res;  
MYSQL\_ROW row;

int i,j;  
int n\_rows=0;

mysql\_init(mysql);

printf("%s %s\n",(!mysql\_real\_connect(mysql,“localhost”,“root”,"----",“mysql”,0,NULL,0)?"Error connection at database: ":“Connected…\n”),mysql\_error(mysql));

printf(“Sélection de la base …\n”);

if (mysql\_select\_db(mysql,“mysql”))  
{  
printf(“Accès à la base impossible !\n”);  
return(1);  
}  
printf(“Base sélectionnée.\n”);

res = mysql\_list\_tables(mysql, NULL);

if (res)  
{  
for(i = 0; i \< res-\>row\_count; i++)  
{  
row = mysql\_fetch\_row(res);  
for(j = 0; j \< mysql\_num\_fields(res); j++)  
{  
printf("%s\n", row[j]);

```
    }
}
mysql_free_result(res);

}

```

printf("\nDeconnexion en cours …\n");  
mysql\_close(mysql);  
printf(“Déconnecté.\n”);  
return(0);

}[/code]

Après compilation voilà ce que j’obtiens :

[code]root@serveur:/home/serveur# cc essai4.c -lmysqlclient -o interface  
root@serveur:/home/serveur# ./interface  
Connected…

Sélection de la base …  
Base sélectionnée.  
columns\_priv  
db  
func  
help\_category  
help\_keyword  
help\_relation  
help\_topic  
host  
proc  
procs\_priv  
tables\_priv  
time\_zone  
time\_zone\_leap\_second  
time\_zone\_name  
time\_zone\_transition  
time\_zone\_transition\_type  
user

Deconnexion en cours …  
Erreur de segmentation (core dumped)  
[/code]

Je ne sais pas pourquoi j’ai cette erreur de segmentation !!!  
Merci pour vos réponses !

---

<div class="post-metadata">

**Author:** ![grigric](https://www.debian-fr.org/user_avatar/www.debian-fr.org/grigric/32/3935_2.png) [@grigric](https://www.debian-fr.org/u/grigric)\
**Post date:** [Février 20, 2016, 5:02 UTC](https://www.debian-fr.org/t/mysql-et-c-debutant-resolu/11770/2 "2016-02-20T17:02:35Z")

</div>

Tu as mis un espace à la fin de ton fichier, après l’acolade ?

Des fois cela peut poser problème…

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 20, 2016, 5:02 UTC](https://www.debian-fr.org/t/mysql-et-c-debutant-resolu/11770/3 "2016-02-20T17:02:36Z")

</div>

Tu n’as pas fait d’allocation mémoire pour ta base:

Au lieu de

`MYSQL *mysql;
`  
met

`MYSQL mysql;
`  
et remplace par la suite MYSQL par &MYSQL

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Février 20, 2016, 5:02 UTC](https://www.debian-fr.org/t/mysql-et-c-debutant-resolu/11770/4 "2016-02-20T17:02:37Z")

</div>

Ca, c’est plus du C, mais du C++, il me semble.  
En C, ça serait plutôt:

```auto

```

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 20, 2016, 5:02 UTC](https://www.debian-fr.org/t/mysql-et-c-debutant-resolu/11770/5 "2016-02-20T17:02:37Z")

</div>

> [@](#):
>
> Ca, c’est plus du C, mais du C++, il me semble.

🙂 je ne connais pas bien le C++. En C ça marche bien chez moi ce que j’ai suggéré.

MYSQL mysql;

crée un objet de type MYSQL et de la taille donnée. Mais ta solution est plus élégante.

---

<div class="post-metadata">

**Author:** ![arno3628fr](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/ea5d25/32.png) [@arno3628fr](https://www.debian-fr.org/u/arno3628fr)\
**Post date:** [Février 20, 2016, 5:02 UTC](https://www.debian-fr.org/t/mysql-et-c-debutant-resolu/11770/6 "2016-02-20T17:02:43Z")

</div>

J’ai trouver d’où vient mon problème. En effet, la ligne suivante n’est pas bonne:

`mysql_init(mysql);
`  
il faut la remplacer par `mysql=mysql_init(NULL);`  
maintenant je n’est plus de problème de segmentation.

[code]root@serveur:/home/serveur# ./interface localhost root ---- postfix domain  
Connected…

Sélection de la base …  
Base sélectionnée.

La base contient les tables suivantes:  
alias  
domain  
mailbox

La table selectionnée contient les lignes suivantes:  
La ligne n° 0: test 1  
La ligne n° 1: alban 1

Nombre de champs de la table: 2

Le champ domain est de type 253  
Le champ actif est de type 1

Deconnexion en cours …  
Déconnecté.  
root@serveur:/home/serveur#  
root@serveur:/home/serveur#  
[/code]

Merci pour vos réponses ! 😃

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Février 20, 2016, 5:02 UTC](https://www.debian-fr.org/t/mysql-et-c-debutant-resolu/11770/7 "2016-02-20T17:02:44Z")

</div>

Pour info, mysql\_close fait bien le free(mysql), j’ai vérifié, mais il faut toujours vérifier la libération d’un objet du tas.

PS, tu peux directement faire ton initialisation lors de la déclaration:

```auto

```

---

<div class="post-metadata">

**Author:** ![ed](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ed/32/5886_2.png) [@ed](https://www.debian-fr.org/u/ed)\
**Post date:** [Février 20, 2016, 5:03 UTC](https://www.debian-fr.org/t/mysql-et-c-debutant-resolu/11770/8 "2016-02-20T17:03:00Z")

</div>

[quote=“mattotop”]Ca, c’est plus du C, mais du C++, il me semble.  
En C, ça serait plutôt:

```auto

```

non.

MYSQL c’est une structure. C’est comme faire:

```auto
typdef struct a_s {
  int b;
} a_t;

/* ça reste parfaitement valide, on alloue en "statique"! */
a_s boo;
boo.b = 2;

/* On peut aussi faire une alloc dynamique */
a_t *boo = malloc(sizeof(a_t));
boo->b = 2;
free(boo);
```

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Février 20, 2016, 5:03 UTC](https://www.debian-fr.org/t/mysql-et-c-debutant-resolu/11770/9 "2016-02-20T17:03:01Z")

</div>

ben oui, c’est ce que j’ai dit, non ? Ou est la difference ?

---

<div class="post-metadata">

**Author:** ![ed](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ed/32/5886_2.png) [@ed](https://www.debian-fr.org/u/ed)\
**Post date:** [Février 20, 2016, 5:03 UTC](https://www.debian-fr.org/t/mysql-et-c-debutant-resolu/11770/10 "2016-02-20T17:03:07Z")

</div>

> [@](#):
>
> ben oui, c’est ce que j’ai dit, non ? Ou est la difference ?

Nan, mais ce que je veux dire, c’est que ça n’a rien a voir avec le C++ !!

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Février 20, 2016, 5:03 UTC](https://www.debian-fr.org/t/mysql-et-c-debutant-resolu/11770/11 "2016-02-20T17:03:07Z")

</div>

Bah les réfèrences, il me semblait que c’était une invention C++, mais si tu le dis.
