| 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.5 Types de données de l'API C 
 
Note :
  les requêtes préparées sont susceptibles d'être revues.
Les informations ci-dessous sont destinées aux nouveaux utilisateurs,
mais soyez prévenus qu'elles peuvent changer.
Des modifications incompatibles ont été faites en MySQL 4.1.2.
Voyez  Description des fonctions C de commandes préparées  pour plus de détails.
Les requêtes préparées utilisent 
principalement les deux structures  
MYSQL_STMT
  et  
MYSQL_BIND
  : 
La table suivante montre les valeurs permises, qui peuvent être spécifiées
dans le membre  
buffer_type
  des structures  
MYSQL_BIND
 . La
table montre aussi les types SQL qui correspondent à chaque type 
de  
buffer_type
 , et, pour les types numériques et temporels,
le type C correspondant.
MYSQL_STMT
      Cette structure représente un pointeur de commande sur une commande préparée.
Elle sert pour toutes les fonctions liées aux commandes.La commande est initialisée lorsque la requête est préparée en utilisant
 
mysql_prepare()
 .
 
La structure est utilisées par toutes les fonctions ultérieures,
liées au commandes préparées.
La structure  
MYSQL_STMT
  n'a pas de membres utilisables par l'application. 
Une connexion peut avoir de multiples pointeurs de commandes, et la limite
ne dépend que des ressources systèmes.
 
MYSQL_BIND
      Cette structure est utilisée pour lier les paramètres avec des buffers,
avec  
mysql_bind_param()
 , pour utilisation avec  
mysql_execute()
 ,
ainsi que pour lier les résultats avec des buffers via  
mysql_bind_result()
 m,
lors de la lecture de données avec  
mysql_fetch()
 .
 
La structure  
MYSQL_BIND
  contient les membres suivants : 
Chacun est utilisé pour la lecture et l'écriture, mais leur objectifs
et parfois différent, en fonction du sens de communication.
 
enum enum_field_types buffer_type
      Le type de buffer. Les valeurs possibles pour  
buffer_type
  sont listées plus loin
dans cette section. Pour l'envoi,  
buffer_type
  indique le type de valeur que vous
allez fournir, lors de l'association de paramètres. Pour la réception, cela indique
le type de valeur que vous pouvez lire dans le buffer de résultat.
      
void *buffer
      Pour l'envoi, c'est un pointeur sur le buffer où sont stockées les valeurs
du paramètre de la requête. Pour la réception, c'est un pointeur sur la valeur
retournée. Pour les types numériques,  
buffer
  pointe sur une variable 
avec le bon type C. Si vous associez la variable avec une colonne qui a un
attribut  
UNSIGNED
 , la variable doit être de type C  
unsigned
 .
Pour les colonnes de type date,  
buffer
  doit pointer sur une structure
 
MYSQL_TIME
 . Pour les caractères et les chaînes binaires, 
 
buffer
  doit pointer sur un buffer de caractères.
      
unsigned long buffer_length
      La taille de  
*buffer
  en octets. Pour les caractères et les données binaires C,
buffer_length spécifie la taille de  
*buffer
  à utiliser comme paramètre
si il est utilisé avec  
mysql_bind_param()
 , ou la taille lue dans 
le résultat si il est utilisé avec  
mysql_bind_result()
 .
      
long *length
      Un pointeur sur une variable  
unsigned long
  qui indique le
nombre réel d'octets stockés dans  
*buffer
 .
 
length
  est utilisé pour les données de type caractères ou
binaires. Pour l'envoi de données,  
length
  point sur une
variable  
unsigned long
  qui indique la taille des
valeurs des paramètres stockés dans  
*buffer
 ; cette valeur
est utilisée par  
mysql_execute()
 .
Si  
length
  est un pointeur null, le protocole suppose que les 
données caractères ou binaires sont terminées par null.
Pour la lecture,  
mysql_fetch()
  place la taille de la valeur
de la colonne retournée dans la variable  
length
 . 
length
  est ignorée pour les valeurs numériques et temporelles,
car la taille de ces valeurs sont déterminées par la valeur de 
 
buffer_type
 .
      
my_bool *is_null
      Ce membre pointe sur une variable  
my_bool
  qui est true si la valeur
est  
NULL
 , et false si elle n'est pas  
NULL
 . Pour l'envoi, donnez à 
 
*is_null
  la valeur de true pour indiquer que la valeur que vous émettez
est  
NULL
 . Pour la réception, cette valeur sera true après avoir lu une
ligne si le résultat est  
NULL
 .      
MYSQL_TIME
      Cette structure est utilisée pour écrire et lire des données de type 
DATE, TIME et TIMESTAMP, directement avec le serveur.
Cela se fait en donnant au membre  
buffer_type
  d'une structure  
MYSQL_BIND
 
un des types temporels, et en donnant au membre  
buffer
  un pointeur sur une
structure  
MYSQL_TIME
 .
La structure  
MYSQL_TIME
  contient les membres suivants :
 
Seuls les membres d'une structure  
MYSQL_TIME
  qui s'appliquent
à une valeur sont utilisés : 
les éléments  
year
 ,  
month
  et  
day
  sont utilisés
pour les types  
DATE
 ,  
DATETIME
  et  
TIMESTAMP
 ;
les éléments  
hour
 ,  
minute
  et  
second
  sont utilisés
pour les types  
TIME
 ,  
DATETIME
  et  
TIMESTAMP
 .
 Gestion en C des dates et heures .
unsigned int year
      L'année.
      
unsigned int month
      Le mois de l'année.
      
unsigned int day
      Le jour du mois.
      
unsigned int hour
      L'heure du jour.
      
unsigned int minute
      La minute de l'heure.
      
unsigned int second
      La seconde de la minute.
      
my_bool neg
      Un booléen pour indiquer que le temps est négatif.
      
unsigned long second_part
      La partie décimale de la seconde.
Ce membre est actuellement inutilisé.
      
| buffer_type
Valeur | Type SQL | Type C |  
| MYSQL_TYPE_TINY | TINYINT | char |  
| MYSQL_TYPE_SHORT | SMALLINT | short int |  
| MYSQL_TYPE_LONG | INT | long int |  
| MYSQL_TYPE_LONGLONG | BIGINT | long long int |  
| MYSQL_TYPE_FLOAT | FLOAT | float |  
| MYSQL_TYPE_DOUBLE | DOUBLE | double |  
| MYSQL_TYPE_TIME | TIME | MYSQL_TIME |  
| MYSQL_TYPE_DATE | DATE | MYSQL_TIME |  
| MYSQL_TYPE_DATETIME | DATETIME | MYSQL_TIME |  
| MYSQL_TYPE_TIMESTAMP | TIMESTAMP | MYSQL_TIME |  
| MYSQL_TYPE_STRING | CHAR |  |  
| MYSQL_TYPE_VAR_STRING | VARCHAR |  |  
| MYSQL_TYPE_TINY_BLOB | TINYBLOB/TINYTEXT |  |  
| MYSQL_TYPE_BLOB | BLOB/TEXT |  |  
| MYSQL_TYPE_MEDIUM_BLOB | MEDIUMBLOB/MEDIUMTEXT |  |  
| MYSQL_TYPE_LONG_BLOB | LONGBLOB/LONGTEXT |  |  
Des conversions implicites de type peuvent survenir dans les deux directions
de communication.
 |