Gestion des commandes multiples avec l'interface C
<<<
Gestion des dates et horaires avec l'interface C Description des fonctions threadées de C
>>>

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.9 Gestion des dates et horaires avec l'interface C

En utilisant le nouveau protocole binaire de MySQL 4.1 et plus récent, vous pouvez envoyer et recevoir les données de type ( DATE , TIME , DATETIME et TIMESTAMP ) avec la structure MYSQL_TIME . Les membres de cette structure sont décrits dans Types de données de commandes préparées C .

Afin d'envoyer les données, il faut utiliser une requête préparée avec la fonction mysql_prepare() . Avant d'appeler la fonction mysql_execute() , pour exécuter la commande, utilisez la procédure suivante pour préparer chaque donnée :

  • Dans la structure MYSQL_BIND , associée aux données, assignez au membre buffer_type le type de données que vous envoyez. Pour DATE , TIME , DATETIME , ou TIMESTAMP , utilisez buffer_type MYSQL_TYPE_DATE , MYSQL_TYPE_TIME , MYSQL_TYPE_DATETIME , ou MYSQL_TYPE_TIMESTAMP , respectivement.
  • Donnez au membre buffer de la structure MYSQL_BIND , l'adresse de la structure MYSQL_TIME dans laquelle vous avez stocké votre valeur temporelle.
  • Remplissez les membres de la structure MYSQL_TIME qui sont adaptés au type de données que vous passez.

Utilisez mysql_bind_param() pour lier les données à la requête. Puis, appelez mysql_execute() .

Pour lire des données temporelles, la procédure est similaire, hormis le fait que vous donnez au membre buffer_type le type de donnée que vous attendez, et que buffer doit pointer sur l'adresse de la structure MYSQL_TIME qui va recevoir les données retournées. Utilisez mysql_bind_results() pour lier les buffers à la commande après avoir appelé mysql_execute() et avant de lire les résultats.

Voici un exemple qui réalise l'insertion de données DATE , TIME et TIMESTAMP . La variable mysql est supposée représenter une connexion valide.


MYSQL_TIME  ts;
MYSQL_BIND  bind[3];
MYSQL_STMT  *stmt;
  
  strmov(query, "INSERT INTO test_table(date_field, time_field,
                                        timestamp_field) VALUES(?,?,?");

  stmt= mysql_prepare(mysql, query, strlen(query)));

  /* configure les trois buffers pour les trois paramètres */
  bind[0].buffer_type= MYSQL_TYPE_DATE;
  bind[0].buffer= (char *)&ts;  
  bind[0].is_null= 0;
  bind[0].length= 0;
  ..
  bind[1]= bind[2]= bind[0];
  ..

  mysql_bind_param(stmt, bind);

  /* Fournit les données à envoyer dans la structure ts */
  ts.year= 2002;
  ts.month= 02;
  ts.day= 03;

  ts.hour= 10;
  ts.minute= 45;
  ts.second= 20;

  mysql_execute(stmt);
  ..

<< Gestion des dates et horaires avec l'interface C >>
Gestion des commandes multiples avec l'interface C API MySQL C Description des fonctions threadées de C