Accéder à une base de données MariaDB en langage C
Documentation : MariaDB Connector/C API Functions
Prenons pour sujet d'étude la base meubleFournisseur qui a été créée dans
l'article Requêtes SQL. Le serveur MariaDB
a été installé et un utilisateur créé dans
l'article : Installer et utiliser un serveur MariaDB
.
Installer le connecteur C - MariaDB
adminX@serveurWebX:~$ su - root Mot de passe : root@debian:~# apt install libmariadbd-dev
Effectuer des requêtes sur la base
Affichage sans contraintes : affichage de tous les fournisseurs
Dans ce cas, il n'est pas nécessaire d'utiliser les requêtes préparées
Programme source
/** * @file selectEnCMysql.c * Compilation: gcc -o selectEnCMysql selectEnCMysql.c `mariadb_config --cflags --libs` * Exécution : ./selectEnCMysql -u <user> -p <password> * Ce programme affiche les données de la table fournisseur de la base de données meubleFournisseur */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <getopt.h> #include <mysql.h> #define HOTE "localhost" #define NOM_BASE "meubleFournisseur" /* Fonction pour afficher l'usage du programme */ void usage(const char *prog_name) { fprintf(stderr, "Usage: %s -u <user> -p <password>\n", prog_name); exit(1); } int main(int argc, char *argv[]) { MYSQL *pMysql; MYSQL_STMT *stmt; MYSQL_BIND param[2]; char *user = NULL, *password = NULL; int opt; // Analyser les arguments avec getopt while ((opt = getopt(argc, argv, "u:p:")) != -1) { switch (opt) { case 'u': user = optarg; break; case 'p': password = optarg; break; default: usage(argv[0]); } } if (user == NULL || password == NULL ) { usage(argv[0]); } /* Initialiser la structure MySQL */ if ((pMysql = mysql_init(NULL)) == NULL) { fprintf(stderr, "mysql_init() échoué : %s\n", mysql_error(pMysql)); return -1; } /* Se connecter à la base de données */ if (mysql_real_connect(pMysql, HOTE, user, password, NOM_BASE, 0, NULL, 0) == NULL) { fprintf(stderr, "mysql_real_connect() échoué : %s\n", mysql_error(pMysql)); mysql_close(pMysql); return -1; } printf("Contenu de la table fournisseur :\n"); /* Afficher le contenu de la table fournisseur */ if (mysql_query(pMysql, "SELECT fou_nom, fou_ville FROM fournisseur") != 0) { fprintf(stderr, "Erreur SELECT : %s\n", mysql_error(pMysql)); mysql_close(pMysql); return -1; } MYSQL_RES *result = mysql_store_result(pMysql); if (result == NULL) { fprintf(stderr, "Erreur mysql_store_result : %s\n", mysql_error(pMysql)); mysql_close(pMysql); return -1; } int num_fields = mysql_num_fields(result); MYSQL_ROW row; MYSQL_FIELD *fields = mysql_fetch_fields(result); // Afficher les noms de colonnes for (int i = 0; i < num_fields; i++) { printf("%s\t", fields[i].name); } printf("\n"); // Afficher les lignes while ((row = mysql_fetch_row(result))) { for (int i = 0; i < num_fields; i++) { printf("%s\t", row[i] ? row[i] : "NULL"); } printf("\n"); } mysql_free_result(result); mysql_close(pMysql); return 0; }
Compilation
adminX@serveurWebX:~$ gcc -o selectEnCMysql selectEnCMysql.c `mariadb_config --cflags --libs`
Remarque : il peut être nécessaire de remplacer mariadb_config
par mysql_config
Exécution
adminX@serveurWebX:~$ ./selectEnCMysql -u adminBaseMeuble1 -p bonjour Contenu de la table fournisseur : fou_nom fou_ville A Meubles Arpajon E Meubles Etampes D Meubles Dourdan B Meubles Brétigny