打印本文 打印本文 关闭窗口 关闭窗口
详细的MySQL C API [转]
作者:武汉SEO闵涛  文章来源:敏韬网  点击数3434  更新时间:2009/4/22 20:49:07  文章录入:mintao  责任编辑:mintao
igned int num_fields;
unsigned int i;
MYSQL_FIELD *field;

num_fields = mysql_num_fields(result);
for(i = 0; i < num_fields; i++)
{
   field = mysql_fetch_field_direct(result, i);
   printf("Field %u is %s\n", i, field->name);
}

20.4.17 mysql_fetch_lengths()
unsigned long *mysql_fetch_lengths(MYSQL_RES *result)

20.4.17.1 说明
返回在结果集合内的当前行的列长度。如果你计划拷贝字段值,这个长度信息对优化也是有用的,因为你可以避免调用strlen()。另外,如果结果集合中包含二进制数据,你必须使用这个函数确定数据的大小,因为strlen()对包含空字符的任何字段返回不正确的结果。

空列和包含NULL的列的长度值是零。为了看清如何区分这两种情况,见mysql_fetch_row()的说明。

20.4.17.2 返回值
表示每列大小的无符号长整数的一个数组(不包括任何终止空字符)。如果出现一个错误,NULL。

20.4.17.3 错误
mysql_fetch_lengths()只对结果集合的当前行有效。如果你在调用mysql_fetch_row()之前或在检索出在结果中的所有以后,它返回NULL。

20.4.17.4 范例
MYSQL_ROW row;
unsigned long *lengths;
unsigned int num_fields;
unsigned int i;

row = mysql_fetch_row(result);
if (row)
{
   num_fields = mysql_num_fields(result);
   lengths = mysql_fetch_lengths(result);
   for(i = 0; i < num_fields; i++)
   {
        printf("Column %u is %lu bytes in length.\n", i, lengths[i]);
   }
}

20.4.18 mysql_fetch_row()
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)

20.4.18.1 说明
检索一个结果集合的下一行。当在mysql_store_result()之后使用时,如果没有更多的行可见所时,mysql_fetch_row()返回NULL。当在mysql_use_result()之后使用时,当没有更多的行可检索时或如果出现一个错误,mysql_fetch_row()返回NULL。

在行中值的数量由mysql_num_fields(result)给出。如果row保存了从一个对用mysql_fetch_row()调用返回的值,指向该值的指针作为row[0]到row[mysql_num_fields(result)-1]来存取。在行中的NULL值由NULL指针指出。

在行中字段值的长度可以通过调用mysql_fetch_lengths()获得。空字段和包含NULL的字段长度都是 0;你可以通过检查该值的指针区分他们。如果指针是NULL,字段是NULL;否则字段是空的。

20.4.18.2 返回值
下一行的一个MYSQL_ROW结构。如果没有更多的行可检索或如果出现一个错误,NULL。

20.4.18.3 错误
CR_SERVER_LOST
对服务器的连接在查询期间失去。
CR_UNKNOWN_ERROR
发生一个未知的错误。
20.4.18.4 范例
MYSQL_ROW row;
unsigned int num_fields;
unsigned int i;

num_fields = mysql_num_fields(result);
while ((row = mysql_fetch_row(result)))
{
  unsigned long *lengths;
  lengths = mysql_fetch_lengths(result);
  for(i = 0; i < num_fields; i++)
  {
      printf("[%.*s] ", (int) lengths[i], row[i] ? row[i] : "NULL");
  }
  printf("\n");
}

20.4.19 mysql_field_count()
unsigned int mysql_field_count(MYSQL *mysql)

如果你正在使用一个比3.22.24早MySQL版本,你应该使用unsigned int mysql_num_fields(MYSQL *mysql)。

20.4.19.1 说明
返回在连接上的最近查询的列的数量。

这个函数一般用在mysql_store_result()返回NULL时(这样你没有结果设置指针)。在这种情况中,你能调用mysql_field_count()确定mysql_store_result()是否应该产生了一个非空的结果。这允许一个客户程序执行正确的操作,而不必知道查询是否是一条SELECT(或类SELECT)语句。下面显示的例子说明这怎样可以做到。

见20.4.51 为什么在mysql_query()返回成功后,mysql_store_result()有时返回NULL?。

20.4.19.2 返回值
在结果集合中表示字段数量字的一个无符号整数。

20.4.19.3 错误
无。

20.4.19.4 范例
MYSQL_RES *result;
unsigned int num_fields;
unsigned int num_rows;

if (mysql_query(&mysql,query_string))
{
   // error
}
else // query succeeded, process any data returned by it
{
   result = mysql_store_result(&mysql);
   if (result)  // there are rows
   {
       num_fields = mysql_num_fields(result);
       // retrieve rows, then call mysql_free_result(result)
   }
   else  // mysql_store_result() returned nothing; should it have?
   {
       if(mysql_field_count(&mysql) == 0)
       {
           // query does not return data
           // (it was not a SELECT)
           num_rows = mysql_affected_rows(&mysql);
       }
       else // mysql_store_result() should have returned data
       {
           fprintf(stderr, "Error: %s\n", mysql_error(&mysql));
       }
   }
}

另一个选择是用mysql_errno(&mysql)代替mysql_field_count(&mysql)调用。在这种情况中,你直接检查来自mysql_store_result()的一个错误而非从mysql_field_count()值来推断语句是否是一个SELECT。


20.4.20 mysql_field_seek()
MYSQL_FIELD_OFFSET mysql_field_seek(MYSQL_RES *result, MYSQL_FIELD_OFFSET offset)

20.4.20.1 说明
将字段光标设置到给定的偏移量。下一次调用mysql_fetch_field()将检索与该偏移量关联的列的字段定义。

为了定位于行的起始,传递一个值为0的offset值。

20.4.20.2 返回值
字段光标的先前的值。

20.4.20.3 错误
无。


20.4.21mysql_field_tell()
MYSQL_FIELD_OFFSET mysql_field_tell(MYSQL_RES *result)

20.4.21.1 说明
返回用于最后一个mysql_fetch_field()的字段光标的位置。这个值可用作mysql_field_seek()的一个参数。

20.4.21.2 返回值
字段光标的当前偏移量。

20.4.21.3 错误
无。


20.4.22 mysql_free_result()
void mysql_free_result(MYSQL_RES *result)

20.4.22.1 说明
释放由mysql_store_result()、mysql_use_result()、mysql_list_dbs()等为一个结果集合分配的内存。当你用完了一个结果集合时,你必须调用mysql_free_result()来释放它使用的内存。

20.4.22.2 返回值
无。

20.4.22.3 错误
无。


20.4.23 mysql_get_client_info()
char *mysql_get_client_info(void)

20.4.23.1 说明
返回代表客户库的版本的字符串。

20.4.23.2 返回值
代表MySQL客户库版本的一个字符串。

20.4.23.3 错误
无。


20.4.24 mysql_get_host_info()
char *mysql_get_host_info(MYSQL *mysql)

20.4.24.1 说明
返回描述正在使用的连接类型的字符串,包括服务其主机名。

20.4.24.2 返回值
表示服务器主机名者和连接类型的字符串。

20.4.24.3 错误
无。

 

20.4.25 mysql_get_proto_info()
unsigned int mysql_get_proto_info(MYSQL *mysql)

20.4.25.1 说明
返回当前连接使用的协议版本。

20.4.25.2 返回值
表示被当前连接使用的协议版本的一个无符号整数。

20.4.25.3 错误
无。


20.4.26 mysql_get_server_info()
char *mysql_get_server_info(MYSQL *mysql)

20.4.26.1 说明
返回表示服务器版本号的字符串。

20.4.26.2 返回值
表示服务器版本号的一个字符串。

20.4.26.3 错误
无。


20.4.27 mysql_info()
char *mysql_info(MYSQL *mysql)

20.4.27.1 说明
检索一个字符串,它提供有关最近执行的查询的信息,但是对下面列出的语句。对其他语句,mysql_info()返回NULL。字符串的格式随查询类型而变化,如下所述。数字仅仅是说明性的;字符串将包含对查询适当的值。

INSERT INTO ... SELECT ...
字符串格式: Records: 100 Duplicates: 0 Warnings: 0
INSERT INTO ... valueS (...),(...),(...)...
字符串格式: Records: 3 Duplicates: 0 Warnings: 0
LOAD DATA INFILE ...
字符串格式: Records: 1 Deleted: 0 Skipped: 0 Warnings: 0
ALTER TABLE
字符串绳格式: Records: 3 Duplicates: 0 Warnings: 0
UPDATE
字符串格式: Rows matched: 40 Changed: 40 Warnings: 0
注意,只有多个值在语句中指定,mysql_info()对INSERT ... valueS语句才返回非NULL值。

20.4.27.2 返回值
表示最近执行的查询的附加信息的一个字符串。如果得不到查询的任何信息,NULL。

20.4.27.3 错误
无。


20.4.28 mysql_init()
MYSQL *mysql_init(MYSQL *mysql)

20.4.28.1 说明
分配或初始化适合mysql_real_connect()的一个MYSQL对象。如果mysql是一个NULL指针,函数分配、初始化并且返回一个新对象。否则对象被初始化并且返回对象的地址。如果mysql_init()分配一个新对象,它将在调用mysql_close()关闭连接时被释放。

20.4.28.2 返回值
一个被初始化的MYSQL*句柄。如果没有足够的内存来分配一个新对象,NULL。

20.4.28.3 错误
在内存不够的情况下,返回NULL。


20.4.29 mysql_insert_id()
my_ulonglong mysql_insert_id(MYSQL *mysql)

20.4.29.1 说明
返回由先前的查询为一个AUTO_INCREMENT列生成的ID。在你执行一个INSERT查询向一个包含AUTO_INCREMENT字段的表中插入后,使用这个函数。

注意,如果先前的查询不产生一个AUTO_INCREMENT值,mysql_insert_id()返回0。如果你需要在以后保存该值,必须在查询生成了该值后马上调用mysql_insert_id()。

也要注意,SQL的LAST_INSERT_ID()函数总是包含最近生成的AUTO_INCREMENT值,并且在查询之间不被重置,因为该函数的值在服务器端维护。

20.4.29.2 返回值
有先前的查询更新的AUTO_INCREMENT字段的值。如果在连接上没有先前的询问或如果查询没更新AUTO_INCREMENT值,返回零。

20.4.29.3 错误
无。


20.4.30 mysql_kill()
int mysql_kill(MYSQL *mysql, unsigned long pid)

20.4.30.1 说明
要求服务器杀死由pid指定的线程。

20.4.30.2 返回值
成功,零。如果出现一个错误,非零。

20.4.30.3 错误
CR_COMMANDS_OUT_OF_SYNC
命令以一个不正确的次序被执行。
CR_SERVER_GONE_ERROR
MySQL服务器关闭了。
CR_SERVER_LOST
对服务器的连接在查询期间失去。
CR_UNKNOWN_ERROR
发生一个未知的错误。
 

20.4.31 mysql_list_dbs()
MYSQL_RES *mysql_list_dbs(MYSQL *mysql, const char *wild)

20.4.31.1 说明
返回一个结果集合,它用在服务器上的匹配wild参数指定的简单正则表达式的数据库名组成。wild可以包含通配符字符“%”或“_”,或可以是匹配所有的数据库的一个NULL指针。调用mysql_list_dbs()类似于执行查询SHOW databases [LIKE wild]。

你必须用mysql_free_result()释放结果集合。

20.4.31.2 返回值
成功,一个MYSQL_RES结果集合。如果出现一个错误,NULL。

20.4.31.3 错误
CR_COMMANDS_OUT_OF_SYNC
命令以一个不正确的次序被执行。
CR_OUT_OF_MEMORY
内存溢出。
CR_SERVER_GONE_ERROR
MySQL服务器关闭了。
CR_SERVER_LOST
对服务器的连接在查询期间失去。
CR_UNKNOWN_ERROR
发生一个未知的错误。
 

20.4.32 mysql_list_fields()
MYSQL_RES *mysql_list_fields(MYSQL *mysql, const char *table, const char *wild)

20.4.32.1 说明
返回一个结果集合,它用在给定表中的匹配wild参数指定的简单正则表达式的列名组成。wild可以包含通配符字符“%”或“_”,或可以是匹配所有列的一个NULL指针。调用mysql_list_fields()类似于执行查询SHOW COLUMNS FROM tbl_name [LIKE wild]。

注意,建议你使用SHOW COLUMNS FROM tbl_name而不是mysql_list_fields()。

你必须用mysql_free_result()释放结果集合。

20.4.32.2 返回值
成功,一个MYSQL_RES的结果集合。如果出线一个错误,NULL。

20.4.32.3 错误
CR_COMMANDS_OUT_OF_SYNC
命令以一个不正确的次序被执行。
CR_SERVER_GONE_ERROR
MySQL服务者关闭了。
CR_SERVER_LOST
对服务器的连接在查询期间失去。
CR_UNKNOWN_ERROR
发生一个未知的错误。

20.4.33 mysql_list_processes()
MYSQL_RES *mysql_list_processes(MYSQL *mysql)

20.4.33.1 说明
返回一个描述当前服务器线程的结果集合。这是与mysqladmin processlist或SHOW PROCESSLIST查询报告的相同信息。

你必须用mysql_free_result()释放结果集合。

20.4.33.2 返回值
成功,一个MYSQL_RES结果集合。如果发生一个错误,NULL。

20.4.33.3 错误
CR_COMMANDS_OUT_OF_SYNC
命令以一个不正确的次序被执行。
CR_SERVER_GONE_ERROR
MySQL服务者关闭了。
CR_SERVER_LOST
对服务器的连接在查询期间失去。
CR_UNKNOWN_ERROR
发生一个未知的错误。
20.4.34 mysql_list_tables()
MYSQL_RES *mysql_list_tables(MYSQL *mysql, const char *wild)

20.4.34.1 说明
返回一个结果集合,它用在当前数据库中的匹配wild参数指定的简单正则表达式的表名组成。wild可以包含通配符字符“%”或“_”,或可以是匹配所有表的一个NULL指针。调用mysql_list_tables()类似于执行询问SHOW tables [LIKE wild]。

你必须用mysql_free_result()释放结果集合。

20.4.34.2 返回值
成功,一个MYSQL_RES结果集合。如果出现一个错误,NULL。

20.4.34.3 错误
CR_COMMANDS_OUT_OF_SYNC
命令以一个不正确的次序被执行。
CR_SERVER_GONE_ERROR
MySQL服务器关闭了。
CR_SERVER_LOST
对服务器的连接在查询期间失去。
CR_UNKNOWN_ERROR
发生一个未知的错误。

20.4.35 mysql_num_fields()
unsigned int mysql_num_fields(MYSQL_RES *result)

unsigned int mysql_num_fields(

上一页  [1] [2] [3] [4]  下一页

打印本文 打印本文 关闭窗口 关闭窗口