Types de données de l'API C <<< |
Vue d'ensemble des fonctions de l'API C | Description des fonctions de l'API 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.2 Vue d'ensemble des fonctions de l'API C
Les fonctions disponibles dans l'API C sont listées ici et décrites en plus de détails dans la section suivante. Description des fonctions C .
Tant qu'une connexion est active, le client envoi des requêtes SQL au serveur à l'aide de mysql_query() ou mysql_real_query() . La différence entre les deux est que mysql_query() s'attend à ce que la requête soit spécifiée en tant que chaîne terminée par la chaîne nulle, tandis que mysql_real_query() attend une chaîne de longueur connue. Si la chaîne contient des données binaires (incluant l'octet nul), vous devez utiliser mysql_real_query() . Pour chaque requête non-sélective (par exemple, INSERT , UPDATE , DELETE ), vous pouvez trouver combien de lignes ont été mises à jour (affectées) en appelant mysql_affected_rows() .Pour les requêtes SELECT , vous récupérez les lignes sélectionnées dans un jeu de résultat. (Notez que quelques commandes ont le même comportement que SELECT , dans le sens où elle renvoient des lignes. Cela inclut SHOW , DESCRIBE , et EXPLAIN . Elles doivent être traitées de la même façon que les requêtes SELECT .) Il y a deux façons pour un client de gérer les jeux de résultats. Une méthode consiste à récupérer le jeu de résultat en entier et en une seule fois en appelant mysql_store_result() . Cette fonction obtient toutes les lignes retournées par la requête et les stocke dans le client. La seconde méthode consiste à initialiser une récupération ligne par ligne du jeu de résultats en appelant mysql_use_result() . Cette fonction initie la récupération, mais ne récupère actuellement aucune ligne à partir du serveur.Dans les deux cas, vous accédez aux ligne en appelant mysql_fetch_row() . Avec mysql_store_result() , mysql_fetch_row() accède aux lignes qui ont déjà été récupérées à partir du serveur. Avec mysql_use_result() , mysql_fetch_row() récupère actuellement la ligne à partir du serveur. Les informations à propos de la taille des données dans chaque ligne est disponible en appelant mysql_fetch_lengths() . Après avoir fini de traiter le jeu de résultats, appelez mysql_free_result() pour libérer la mémoire utilisée.Les deux mécanismes de récupération sont complémentaires. Les programmes clients doivent utiliser l'approche qui leur convient le mieux. En pratique, les clients tendent plus à utiliser mysql_store_result() . Un avantage de mysql_store_result() est que puisque toutes les lignes ont été récupérées dans le client, vous ne pouvez pas que accéder aux lignes séquentiellement, vous pouvez revenir en arrière ou avancer dans le jeu de résultats en utilisant mysql_data_seek() ou mysql_row_seek() pour changer la position de la ligne courante dans le jeu de résultats. Vous pouvez aussi trouver le nombre total des lignes en appelant mysql_num_rows() . D'un autre côté, les besoins en mémoire de mysql_store_result() peuvent être très grands pour les grands jeux de résultats et vous aurez des chances d'obtenir un manque de mémoire.Un avantage de mysql_use_result() est que le client a besoin de moins de mémoire pour le jeu de résultats car il utilise une ligne à la fois (et puisque il y a moins de pertes de mémoire, mysql_use_result() peut être plus rapide). Les inconvénients sont que vous devez récupérer chaque ligne rapidement pour éviter de bloquer le serveur, vous n'avez pas d'accès aléatoires aux lignes dans le jeu de résultats (vous ne pouvez accéder aux lignes que séquentiellement), et vous ne savez pas combien de lignes comporte le jeu de résultats tant que vous ne les avez pas toutes récupérées. De plus, vous devez récupérer toutes les lignes même si vous trouvez entre-temps l'informations que vous cherchiez. L'API permet aux clients de gérer correctement les requêtes (récupérant les lignes seulement en cas de besoin) sans savoir si la requête était un SELECT ou non. Vous pouvez faire cela en appelant mysql_store_result() après chaque mysql_query() (ou mysql_real_query() ). Si l'appel au jeu de résultats réussi, la requête était un SELECT et vous pouvez lire les lignes. Sinon, appelez mysql_field_count() pour vérifier si un résultat aurait du être retourné. Si mysql_field_count() retourne zéro, la requête n'a pas retourné de données (cela indique que c'était un INSERT , UPDATE , DELETE , etc.), et ne devait pas retourner de lignes. Si mysql_field_count() est non-nul, la requête aurait du retourner des lignes, mais ne l'a pas fait. Cela indique que la requête était un SELECT qui a échoué. Reportez vous à la description de mysql_field_count() pour un exemple d'utilisation.mysql_store_result() et mysql_use_result() vous permettent d'obtenir des informations à propos des champs qui constituent le jeu de résultat (le nombre de champs, leurs noms et types, etc.). Vous pouvez accéder aux informations du champ séquentiellement dans une ligne en appelant plusieurs fois mysql_fetch_field() , ou avec le numéro du champ dans la ligne en appelant mysql_fetch_field_direct() . La position courante du pointeur de champ peut être changée en appelant mysql_field_seek() . Changer le pointeur de champ affecte les appels suivants à mysql_fetch_field() . Vous pouvez aussi obtenir en une seule fois les informations sur les champs en appelant mysql_fetch_fields() . Pour détecter les erreurs, MySQL fournit un accès aux informations des erreurs via les fonctions mysql_errno() et mysql_error() . Elles retournent le code de l'erreur et le message pour la dernière fonction invoquée qui aurait pu réussir ou échouer, vous permettant ainsi de déterminer les erreurs et leurs causes. |
<< | Vue d'ensemble des fonctions de l'API C | >> |
Types de données de l'API C | API MySQL C | Description des fonctions de l'API C |