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] 下一页 |