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 :