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.