Interface en langage C MySQL

1. mysql_init

MYSQL *mysql_init(MYSQL *mysql);

Le rôle de la fonction mysql_init : Créer un objet MYSQL (cet objet sert à se connecter à la base de données).

Paramètres de la fonction mysql_init :

① mysql : pointeur de structure MYSQL, généralement défini sur NULL.

La valeur de retour de la fonction mysql_init :

① Succès, renvoie un pointeur vers l'objet MYSQL.

② En cas d'échec, renvoie NULL.

L'objet MYSQL est défini comme suit :

structure typedef st_mysql

{

  NET net ; /* Paramètres de communication */

  caractère non signé *connector_fd ; /* ConnectorFd pour SSL */

  char *host,*user,*passwd,*unix_socket,*server_version,*host_info;

  char *info, *db;

  struct charset_info_st *charset;

  MYSQL_FIELD *champs ;

  MEM_ROOT champ_alloc ;

  my_ulonglong affectée_rows ;

  mon_ulonglong insert_id; /* id si insertion sur table avec NEXTNR */

  mon_ulonglong extra_info; /* Non utilisé */

  thread_id long non signé ; /* Identifiant de connexion au serveur */

  longueur_paquet longue non signée ;

  port int non signé ;

  client_flag long non signé, capacités_serveur ;

  version_protocole int non signé ;

  unsigned int field_count ;

  unsigned int server_status ;

  unsigned int langue_serveur ;

  unsigned int warn_count ;

  options de structure st_mysql_options ;

  énumérer le statut mysql_status ;

  mon_bool free_me ; /* Si libre dans mysql_close */

  my_bool se reconnecte ; /* mis à 1 si reconnexion automatique */

 

  /* chaîne aléatoire à l'échelle de la session */

  brouillage de caractères[SCRAMBLE_LENGTH+1];

  my_bool inutilisé1;

  void *unused2, *unused3, *unused4, *unused5;

 

  LISTE *stmts; /* liste de toutes les instructions */

  const struct st_mysql_methods *méthodes ;

  vide *thd;

  /*

    Pointe vers un indicateur booléen dans MYSQL_RES ou MYSQL_STMT. Nous mettons ce drapeau

    de mysql_stmt_close si close devait annuler le jeu de résultats de cet objet.

  */

  mon_bool *unbuffered_fetch_owner ;

  /* nécessaire pour le serveur intégré - pas de tampon net pour stocker les 'infos' */

  char *info_buffer;

  annuler *extension;

}MYSQL ;

Il existe de nombreux paramètres de connexion de base dans l'objet MYSQL. Il contient également une variable de structure appelée st_mysql_methods, qui contient de nombreux pointeurs de fonction. Ces pointeurs de fonction seront appelés dans diverses opérations sur les données une fois la connexion à la base de données réussie.

2. mysql_real_connect

MYSQL *mysql_real_connect(MYSQL *mysql, const char *hôte,

  const char *utilisateur,

  const char *passwd,

  const char *db,

  port int non signé,

  const char *unix_socket,

  drapeau client long non signé);

Le rôle de la fonction mysql_real_connect : se connecter à la base de données.

Paramètres de la fonction mysql_real_connect :

① mysql : pointeur d'objet MYSQL.

② hôte : adresse IP du serveur MySQL à connecter.

③ utilisateur : nom d'utilisateur, sous quel utilisateur se connecter.

④ passwd : mot de passe utilisateur.

⑤ db : La base de données à connecter.

⑥ port : Le numéro de port du serveur MySQL à connecter.

⑦ unix_socket : généralement défini sur NULL.

⑧ clientflag : généralement défini sur 0.

La valeur de retour de la fonction mysql_real_connect :

① En cas de succès, un pointeur vers l'objet MYSQL est renvoyé, qui est la même que la valeur du premier paramètre mysql.

② En cas d'échec, renvoie NULL.

3. mysql_close

void mysql_close(MYSQL *chaussette);

Le rôle de la fonction mysql_close : fermer la connexion à la base de données.

Paramètres de la fonction mysql_close :

① chaussette : pointeur d'objet MYSQL.

La valeur de retour de la fonction mysql_close : Aucune.

4. mysql_set_character_set

Après vous être connecté à la base de données, vous devez unifier les formats de codage du client et du serveur pour éviter les caractères tronqués lors de l'interaction des données.
int mysql_set_character_set(MYSQL *mysql, const char *csname);

Le rôle de la fonction mysql_set_character_set : définit le format d'encodage.

Paramètres de la fonction mysql_set_character_set :

① mysql : pointeur d'objet MYSQL.

② csname : quel jeu de caractères définir.

La valeur de retour de la fonction mysql_set_character_set :

① Succès, 0.

② Échec, non-0.

5. mysql_query
int mysql_query(MYSQL *mysql, const char *q);

Le rôle de la fonction mysql_query : émettre des requêtes SQL.

Paramètres de la fonction mysql_query :

① mysql : pointeur d'objet MYSQL.

② q : instruction SQL à exécuter (l'instruction ne peut pas avoir de point-virgule à la fin).

La valeur de retour de la fonction mysql_query :

① Succès, 0.

② Échec, non-0.

6. mysql_store_result
MYSQL_RES *mysql_store_result(MYSQL *mysql);

Le rôle de la fonction mysql_store_result : obtenir les résultats des requêtes.

Paramètres de la fonction mysql_store_result :

① mysql : pointeur d'objet MYSQL.

La valeur de retour de la fonction mysql_store_result :

① Succès, renvoie un pointeur vers l'objet MYSQL_RES.

② En cas d'échec, renvoie NULL.

Cette fonction appellera le pointeur de fonction correspondant dans st_mysql_methods dans la variable MYSQL pour obtenir les résultats de la requête.

Cette fonction mallocera une variable de structure MYSQL_RES, enregistrera les résultats de la requête obtenus dans la variable et retournera enfin le pointeur de la variable.

Puisque l'espace mémoire de MYSQL_RES est mal alloué, vous devez penser à appeler la fonction libre (fonction mysql_free_result) pour libérer l'espace mémoire correspondant après utilisation, sinon des fuites de mémoire se produiront.

Après avoir exécuté mysql_store_result , les données à interroger sont en fait déjà dans la variable MYSQL_RES. La fonction suivante lit essentiellement les données dans MYSQL_RES, et les paramètres sont tous des pointeurs d'objet MYSQL_RES :

// Récupère le nombre de lignes dans le résultat

my_ulonglong mysql_num_rows(MYSQL_RES *res);

// Récupère le nombre de colonnes dans le résultat

unsigned int mysql_num_fields(MYSQL_RES *res);

// Récupère les propriétés de colonne du résultat

MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *res);

// Récupère une ligne d'enregistrements dans le résultat

MYSQL_ROW mysql_fetch_row(MYSQL_RES *résultat);

Concernant la valeur de retour MYSQL_ROW de la fonction mysql_fetch_row :

MYSQL_ROW, c'est-à-dire une ligne d'enregistrements dans le résultat, correspond à des informations sur plusieurs colonnes et est en fait un tableau de chaînes. Par conséquent, le type MYSQL_ROW est essentiellement le type char**, et sa définition est la suivante :

typedef char **MYSQL_ROW; /* renvoie les données sous forme de tableau de chaînes */

7.mysql_free_result()

void mysql_free_result(MYSQL_RES *result);

Fonction : Utilisé pour libérer   la mémoire allouée par mysql_store_result précédemment.

3. Exemples d'utilisation

1. Connectez-vous à la base de données et fermez la connexion à la base de données

#include <stdio.h>

#include <winsock.h>

#include <mysql.h>

const char host[] = "127.0.0.1"; //L'adresse IP de la machine sur laquelle se trouve MySQL

const int port = 0; // Le port de la machine où se trouve MySQL

const char db[] = "test"; // nom de la base de données

const char user[] = "root"; // nom d'utilisateur

const char passwd[] = "test123"; // Mot de passe utilisateur

int main()

{

//1. Récupérer l'instance MySQL (équivalent à créer un handle MySQL)

MYSQL* ms = mysql_init(nullptr);

//2. Connectez-vous à la base de données

if(mysql_real_connect(ms, hôte, utilisateur, passwd, db, port, nullptr, 0) == nullptr) {

printf("La connexion à la base de données a échoué !\n");

renvoyer 1 ;

}

printf("Connexion à la base de données réussie !\n");

//3. Accéder à la base de données

//4. Fermez la connexion à la base de données

mysql_close(ms);

printf("Connexion à la base de données fermée avec succès !\n");

renvoie 0 ;

}

2. Accédez à la base de données

mysql_query

#include <stdio.h>

#include <winsock.h>

#include <mysql.h>

 

const char host[] = "127.0.0.1"; //L'adresse IP de la machine sur laquelle se trouve MySQL

const int port = 0; // Le port de la machine où se trouve MySQL

const char db[] = "test"; // nom de la base de données

const char user[] = "root"; // nom d'utilisateur

const char passwd[] = "test123"; // Mot de passe utilisateur

 

int main()

{

//1. Récupérer l'instance MySQL (équivalent à créer un handle MySQL)

MYSQL* ms = mysql_init(nullptr);

 

//2. Connectez-vous à la base de données

if(mysql_real_connect(ms, hôte, utilisateur, passwd, db, port, nullptr, 0) == nullptr) {

printf("La connexion à la base de données a échoué !\n");

renvoyer 1 ;

}

//Définit le format d'encodage de la connexion

mysql_set_character_set(ms, "utf8");

 

printf("Connexion à la base de données réussie !\n");

 

//3. Accéder à la base de données

//La sélection 3.1 est en fait la plus difficile à gérer ! L'exécution de select sql n'est que la première étape et une analyse plus approfondie des données est nécessaire.

char sql[] = "select * from orderitems;";

int code = mysql_query(ms, sql);

si(code != 0){

printf("exécution : %s a échoué\n", sql);

retourner 2 ;

}

printf("exécuter : %s succès\n", sql);

 

//3.2 Analyser les données - obtenir le numéro de ligne et le numéro de colonne

MYSQL_RES *result = mysql_store_result(ms);

int lignes = mysql_num_rows(result);

int cols = mysql_num_fields(result);

printf("Nombre de lignes : %d, nombre de colonnes : %d\n", lignes, colonnes);

 

//3.3 Analyser les données - obtenir les noms de colonnes dans le tableau - généralement non utilisé, juste pour tester l'intégrité du code

MYSQL_FIELD *fields = mysql_fetch_fields(résultat);

pour(int i = 0; i < cols; i++){

printf("%s\t", champs[i].name);

}

printf("\n");

 

//3.4 Analyser les données - obtenir les données dans le tableau - important

pour(int i = 0; i < lignes; i++){

MYSQL_ROW line = mysql_fetch_row(result); // Obtenez une ligne complète d'enregistrements (par défaut de l'avant vers l'arrière)

pour(int j = 0; j < cols; j++){

printf("%s\t", line[j]); // Imprimer plusieurs colonnes de chaînes dans une ligne d'enregistrements en séquence

}

printf("\n");

}

 

mysql_free_result(result); // Libère de l'espace mémoire

 

//4. Fermez la connexion à la base de données

mysql_close(ms);

printf("Connexion à la base de données fermée avec succès !\n");

renvoie 0 ;

}

#include <stdio.h>

#include <winsock.h>

#include <mysql.h>

 

const char host[] = "127.0.0.1"; //L'adresse IP de la machine sur laquelle se trouve MySQL

const int port = 0; // Le port de la machine où se trouve MySQL

const char db[] = "test"; // nom de la base de données

const char user[] = "root"; // nom d'utilisateur

const char passwd[] = "test123"; // Mot de passe utilisateur

 

// Interroge le contenu de la table

sélection int (MYSQL* ms)

{

//La sélection 3.1 est en fait la plus difficile à gérer ! L'exécution de select sql n'est que la première étape et une analyse plus approfondie des données est nécessaire.

char sql[] = "select * from man;";

int code = mysql_query(ms, sql);

si(code != 0){

printf("exécution : %s a échoué\n", sql);

retourner 2 ;

}

printf("exécuter : %s succès\n", sql);

 

//3.2 Analyser les données - obtenir le numéro de ligne et le numéro de colonne

MYSQL_RES *result = mysql_store_result(ms);

int lignes = mysql_num_rows(result);

int cols = mysql_num_fields(result);

printf("Nombre de lignes : %d, nombre de colonnes : %d\n", lignes, colonnes);

 

//3.3 Analyser les données - obtenir les noms de colonnes dans le tableau - généralement non utilisé, juste pour tester l'intégrité du code

MYSQL_FIELD *fields = mysql_fetch_fields(résultat);

pour(int i = 0; i < cols; i++){

printf("%s\t", champs[i].name);

}

printf("\n");

 

//3.4 Analyser les données - obtenir les données dans le tableau - important

pour(int i = 0; i < lignes; i++){

MYSQL_ROW line = mysql_fetch_row(result); // Obtenez une ligne complète d'enregistrements (par défaut de l'avant vers l'arrière)

pour(int j = 0; j < cols; j++){

printf("%s\t", line[j]); // Imprimer plusieurs colonnes de chaînes dans une ligne d'enregistrements en séquence

}

printf("\n");

}

 

mysql_free_result(result); // Libère de l'espace mémoire

renvoie 0 ;

}

 

int main()

{

//1. Récupérer l'instance MySQL (équivalent à créer un handle MySQL)

MYSQL* ms = mysql_init(nullptr);

 

//2. Connectez-vous à la base de données

if(mysql_real_connect(ms, hôte, utilisateur, passwd, db, port, nullptr, 0) == nullptr) {

printf("La connexion à la base de données a échoué !\n");

renvoyer 1 ;

}

//Définit le format d'encodage de la connexion

mysql_set_character_set(ms, "gb2312");

 

printf("Connexion à la base de données réussie !\n");

 

//3. Accéder à la base de données

sélectionner(ms);        

 

// opération d'insertion

char sql_insert[] = "insérer dans les valeurs man (\'小刚\', 19);";

int res = mysql_query(ms, sql_insert);

si(res != 0){

printf("exécution : %s a échoué\n", sql_insert);

retourner 2 ;

}

printf("exécuter : %s succès\n", sql_insert);

 

sélectionner(ms);

 

//4. Fermez la connexion à la base de données

mysql_close(ms);

printf("Connexion à la base de données fermée avec succès !\n");

renvoie 0 ;

}

#include <stdio.h>

#include <winsock.h>

#include <mysql.h>

 

const char host[] = "127.0.0.1"; //L'adresse IP de la machine sur laquelle se trouve MySQL

const int port = 0; // Le port de la machine où se trouve MySQL

const char db[] = "test"; // nom de la base de données

const char user[] = "root"; // nom d'utilisateur

const char passwd[] = "test123"; // Mot de passe utilisateur

 

// Interroge le contenu de la table

sélection int (MYSQL* ms)

{

//La sélection 3.1 est en fait la plus difficile à gérer ! L'exécution de select sql n'est que la première étape et une analyse plus approfondie des données est nécessaire.

char sql[] = "select * from man;";

int code = mysql_query(ms, sql);

si(code != 0){

printf("exécution : %s a échoué\n", sql);

retourner 2 ;

}

printf("exécuter : %s succès\n", sql);

 

//3.2 Analyser les données - obtenir le numéro de ligne et le numéro de colonne

MYSQL_RES *result = mysql_store_result(ms);

int lignes = mysql_num_rows(result);

int cols = mysql_num_fields(result);

printf("Nombre de lignes : %d, nombre de colonnes : %d\n", lignes, colonnes);

 

//3.3 Analyser les données - obtenir les noms de colonnes dans le tableau - généralement non utilisé, juste pour tester l'intégrité du code

MYSQL_FIELD *fields = mysql_fetch_fields(résultat);

pour(int i = 0; i < cols; i++){

printf("%s\t", champs[i].name);

}

printf("\n");

 

//3.4 Analyser les données - obtenir les données dans le tableau - important

pour(int i = 0; i < lignes; i++){

MYSQL_ROW line = mysql_fetch_row(result); // Obtenez une ligne complète d'enregistrements (par défaut de l'avant vers l'arrière)

pour(int j = 0; j < cols; j++){

printf("%s\t", line[j]); // Imprimer plusieurs colonnes de chaînes dans une ligne d'enregistrements en séquence

}

printf("\n");

}

 

mysql_free_result(result); // Libère de l'espace mémoire

renvoie 0 ;

}

 

int main()

{

//1. Récupérer l'instance MySQL (équivalent à créer un handle MySQL)

MYSQL* ms = mysql_init(nullptr);

 

//2. Connectez-vous à la base de données

if(mysql_real_connect(ms, hôte, utilisateur, passwd, db, port, nullptr, 0) == nullptr) {

printf("La connexion à la base de données a échoué !\n");

renvoyer 1 ;

}

//Définit le format d'encodage de la connexion

mysql_set_character_set(ms, "gb2312");

 

printf("Connexion à la base de données réussie !\n");

 

//3. Accéder à la base de données

sélectionner(ms);        

 

//opération de suppression

char sql_delete[] = "supprimer de man où nom=\'小刚\'";

int res = mysql_query(ms, sql_delete);

si(res != 0){

printf("exécution : %s a échoué\n", sql_delete);

retourner 2 ;

}

printf("exécuter : %s succès\n", sql_delete);

 

sélectionner(ms);

 

//4. Fermez la connexion à la base de données

mysql_close(ms);

printf("Connexion à la base de données fermée avec succès !\n");

renvoie 0 ;

}

#include <stdio.h>

#include <winsock.h>

#include <mysql.h>

 

const char host[] = "127.0.0.1"; //L'adresse IP de la machine sur laquelle se trouve MySQL

const int port = 0; // Le port de la machine où se trouve MySQL

const char db[] = "test"; // nom de la base de données

const char user[] = "root"; // nom d'utilisateur

const char passwd[] = "test123"; // Mot de passe utilisateur

 

// Interroge le contenu de la table

sélection int (MYSQL* ms)

{

//La sélection 3.1 est en fait la plus difficile à gérer ! L'exécution de select sql n'est que la première étape et une analyse plus approfondie des données est nécessaire.

char sql[] = "select * from man;";

int code = mysql_query(ms, sql);

si(code != 0){

printf("exécution : %s a échoué\n", sql);

retourner 2 ;

}

printf("exécuter : %s succès\n", sql);

 

//3.2 Analyser les données - obtenir le numéro de ligne et le numéro de colonne

MYSQL_RES *result = mysql_store_result(ms);

int lignes = mysql_num_rows(result);

int cols = mysql_num_fields(result);

printf("Nombre de lignes : %d, nombre de colonnes : %d\n", lignes, colonnes);

 

//3.3 Analyser les données - obtenir les noms de colonnes dans le tableau - généralement non utilisé, juste pour tester l'intégrité du code

MYSQL_FIELD *fields = mysql_fetch_fields(résultat);

pour(int i = 0; i < cols; i++){

printf("%s\t", champs[i].name);

}

printf("\n");

 

//3.4 Analyser les données - obtenir les données dans le tableau - important

pour(int i = 0; i < lignes; i++){

MYSQL_ROW line = mysql_fetch_row(result); // Obtenez une ligne complète d'enregistrements (par défaut de l'avant vers l'arrière)

pour(int j = 0; j < cols; j++){

printf("%s\t", line[j]); // Imprimer plusieurs colonnes de chaînes dans une ligne d'enregistrements en séquence

}

printf("\n");

}

 

mysql_free_result(result); // Libère de l'espace mémoire

renvoie 0 ;

}

 

int main()

{

//1. Récupérer l'instance MySQL (équivalent à créer un handle MySQL)

MYSQL* ms = mysql_init(nullptr);

 

//2. Connectez-vous à la base de données

if(mysql_real_connect(ms, hôte, utilisateur, passwd, db, port, nullptr, 0) == nullptr) {

printf("La connexion à la base de données a échoué !\n");

renvoyer 1 ;

}

//Définit le format d'encodage de la connexion

mysql_set_character_set(ms, "gb2312");

 

printf("Connexion à la base de données réussie !\n");

 

//3. Accéder à la base de données

sélectionner(ms);        

 

// opération de mise à jour

char sql_update[] = "update man set age = 20 où nom=\'小明\'";

int res = mysql_query(ms, sql_update);

si(res != 0){

printf("exécution : %s a échoué\n", sql_update);

retourner 2 ;

}

printf("exécuter : %s succès\n", sql_update);

 

sélectionner(ms);

 

//4. Fermez la connexion à la base de données

mysql_close(ms);

printf("Connexion à la base de données fermée avec succès !\n");

renvoie 0 ;

}

  • Effectuer l'opération de mise à jour :
  • Effectuez l'opération de suppression :
  • Effectuer l'opération d'insertion :
  • Effectuer une opération de sélection :

Je suppose que tu aimes

Origine blog.csdn.net/xijinno1/article/details/133256198
conseillé
Classement