| 21.2 API MySQL C
 21 API MySQL
 Manuel de Référence MySQL 4.1 : Version Française
 
 ->Types de données de l'API C
 . Vue d'ensemble des fonctions de l'API C
 . Description des fonctions de l'API C
 . Fonctions C de commandes préparées
 . Types de données de l'API C
 . Présentation des fonctions de l'interface C
 . Descriptions des fonctions C pour les requêtes préparées
 . Gestion des commandes multiples avec l'interface C
 . Gestion des dates et horaires avec l'interface C
 . Description des fonctions threadées de C
 . Description des fonctions C du serveur embarqué
 . Questions courantes sur la bibliothèque C
 . Compiler les clients
 . Comment faire un client MySQL threadé
 . libmysqld , la bibliothèque du serveur embarqué MySQL
 
 
 | 
  21.2.1 Types de données de l'API C 
 
La structure  
MYSQL_FIELD
  contient les membres listés ici :
MYSQL
      Cette structure représente un gestionnaire de connexion à la base de données.
Elle est utilisée dans la plupart des fonctions MySQL.
      
MYSQL_RES
      Cette structure représente le résultat d'une requête qui retourne des lignes
( 
SELECT
 ,  
SHOW
 ,  
DESCRIBE
 ,  
EXPLAIN
 ). L'information
retournée par une requête est appelée  
jeu de résultats
  dans le reste de
cette section.
      
MYSQL_ROW
      C'est une représentation sûre pour les types d'une ligne de données. Elle est 
actuellement implémentée en tant que tableau de chaîne à octets comptés.
(Vous ne pouvez la traiter en tant que chaîne terminée par une valeur nulle si
les valeurs du champ peuvent contenir des données binaires, car de telles valeurs
peuvent contenir elles-mêmes des octets nuls.) Les lignes sont obtenues en appelant
 
mysql_fetch_row()
 .
      
MYSQL_FIELD
      Cette structure contient des informations à propos du champ, tel que son nom,
son type, et sa taille. Ses membres sont décrit en plus de détails ici.
Vous pouvez obtenir une structure  
MYSQL_FIELD
  pour chaque champ en
appelant plusieurs fois  
mysql_fetch_field()
 . Les valeurs des champs ne
font pas partie de la structure; elles sont contenues dans une structure
 
MYSQL_ROW
 .
      
MYSQL_FIELD_OFFSET
      C'est une représentation sûre des types pour les index dans une liste de 
champs MySQL.  (Utilisés par  
mysql_field_seek()
 .) Les index sont des
numéros de champs, dans une ligne, commençant à zéro.
      
my_ulonglong
      Le type utilisé pour le nombre de lignes et pour  
mysql_affected_rows()
 ,
 
mysql_num_rows()
 , et  
mysql_insert_id()
 . Ce type fournit une échelle
allant de  
0
  à  
1.84e19
 .Sur quelques systèmes, essayer d'écrire la valeur d'un type  
my_ulonglong
 
ne fonctionnera pas. Pour écrire une telle valeur, convertissez là en  
unsigned long
 
et utilisez un format d'impression  
%lu
 . Exemple :
 
| 
printf ("Nombre de lignes : %lu\n", (unsigned long) mysql_num_rows(result));
 | 
 
char * name
      Le nom du champ, une chaîne terminée par une valeur nulle.
      
char * table
      Le nom de la table contenant ce champ, s'il n'est pas calculé.
Pour les champs calculés, la valeur de  
table
  est une chaîne vide.
      
char * def
      La valeur par défaut de ce champ, en tant que chaîne terminée par une valeur nulle.
Ce n'est définit que si vous utilisez  
mysql_list_fields()
 .
      
enum enum_field_types type
      Le type du champ.
La valeur de  
type
  peut être l'une des suivantes : 
Vous pouvez utiliser la macro  
IS_NUM()
  pour tester si un champ est 
de type numérique ou non. Passez la valeur de  
type
  à  
IS_NUM()
  
et elle sera évaluée à TRUE si le champ est numérique :
| Valeur de type | Description du type |  
| FIELD_TYPE_TINY | Champ 
TINYINT |  
| FIELD_TYPE_SHORT | Champ 
SMALLINT |  
| FIELD_TYPE_LONG | Champ 
INTEGER |  
| FIELD_TYPE_INT24 | Champ 
MEDIUMINT |  
| FIELD_TYPE_LONGLONG | Champ 
BIGINT |  
| FIELD_TYPE_DECIMAL | Champ 
DECIMAL
 ou 
NUMERIC |  
| FIELD_TYPE_FLOAT | Champ 
FLOAT |  
| FIELD_TYPE_DOUBLE | Champ 
DOUBLE
 ou 
REAL |  
| FIELD_TYPE_TIMESTAMP | Champ 
TIMESTAMP |  
| FIELD_TYPE_DATE | Champ 
DATE |  
| FIELD_TYPE_TIME | Champ 
TIME |  
| FIELD_TYPE_DATETIME | Champ 
DATETIME |  
| FIELD_TYPE_YEAR | Champ 
YEAR |  
| FIELD_TYPE_STRING | Champ chaîne de caractères (
CHAR
 ou 
VARCHAR
) |  
| FIELD_TYPE_VAR_STRING | Champ 
VARCHAR |  
| FIELD_TYPE_BLOB | Champ 
BLOB
 ou 
TEXT
 (utilisez 
max_length
 pour déterminer la taille maximale) |  
| FIELD_TYPE_SET | Champ 
SET |  
| FIELD_TYPE_ENUM | Champ 
ENUM |  
| FIELD_TYPE_NULL | Champ de type 
NULL |  
| FIELD_TYPE_CHAR | Désapprouvé, utilisez 
FIELD_TYPE_TINY
 à la place |  | 
if (IS_NUM(field->type))printf("Le champ est numérique\n");
 | 
 
unsigned int length
      La taille du champ, comme spécifié dans la définition de la table.
      
unsigned int max_length
      La longueur maximale du champ pour le jeu de résultats (la taille de la plus longue
valeur de champ actuellement dans le jeu de résultat). Si vous utilisez
 
mysql_store_result()
  ou  
mysql_list_fields()
 , cela contient la longueur
maximale pour le champ. Si vous utilisez  
mysql_use_result()
 , la valeur de cette
variable est zéro.
      
unsigned int flags
      Les différents attributs sous forme de bits pour le champ. La valeur de  
flags
  peut avoir zéro
ou plusieurs de ces bits suivants activés : 
L'utilisation des attributs  
BLOB_FLAG
 ,  
ENUM_FLAG
 ,  
SET_FLAG
 , et
 
TIMESTAMP_FLAG
  est désapprouvé car ils indiquent un type de champ plutôt
qu'un attribut de type de champ. Il est préférable de tester  
field->type
  
avec  
FIELD_TYPE_BLOB
 ,  
FIELD_TYPE_ENUM
 ,  
FIELD_TYPE_SET
 , ou 
 
FIELD_TYPE_TIMESTAMP
  à la place.
| Valeur d'attribut | Description d'attribut |  
| NOT_NULL_FLAG | Le champ ne peut être 
NULL |  
| PRI_KEY_FLAG | Le champ fait parti d'une clef primaire |  
| UNIQUE_KEY_FLAG | Le champ fait parti d'une clef unique |  
| MULTIPLE_KEY_FLAG | Le champ fait parti d'une clef non-unique |  
| UNSIGNED_FLAG | Le champ possède l'attribut 
UNSIGNED |  
| ZEROFILL_FLAG | Le champ possède l'attribut 
ZEROFILL |  
| BINARY_FLAG | Le champ possède l'attribut 
BINARY |  
| AUTO_INCREMENT_FLAG | Le champ possède l'attribut 
AUTO_INCREMENT |  
| ENUM_FLAG | Le champ est un 
ENUM
 (désapprouvé) |  
| SET_FLAG | Le champ est un 
SET
 (désapprouvé) |  
| BLOB_FLAG | Le champ est un 
BLOB
 ou 
TEXT
 (désapprouvé) |  
| TIMESTAMP_FLAG | Le champ est un 
TIMESTAMP
 (désapprouvé) |  
L'exemple suivant illustre une utilisation typique de la valeur de  
flags
  :
 Vous pouvez utiliser les différentes macros ci-dessous pour déterminer le statut
booléen de la valeur de l'attribut :| 
if (field->flags & NOT_NULL_FLAG)printf("Le champ ne peut être nul\n");
 | 
 
| Statut de l'attribut | Description |  
| IS_NOT_NULL(flags) | Vrai si le champ est défini en tant que 
NOT NULL |  
| IS_PRI_KEY(flags) | Vrai si le champ est une clef primaire |  
| IS_BLOB(flags) | Vrai si le champ est un 
BLOB
 ou 
TEXT
 (désapprouvé; tester plutôt 
field->type
) |  
unsigned int decimals
      Le nombre de décimales pour les champs numériques.      |