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 Section 24.2.7, « Description des fonctions C pour les requêtes préparées » pour plus de détails.
Les requêtes préparées utilisent principalement les deux
structures MYSQL_STMT et
MYSQL_BIND :
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.
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.
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 :
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é.
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.
See Section 24.2.10, « Gestion des dates et horaires avec l'interface C ».
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.
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.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.
