我已经准备并执行了一个MYSQL_STMT,现在我想要获取数据。
我可以用mysql_stmt_field_count得到字段的数目。
我需要知道每个字段的MYSQL_FIELD信息。
如何获取MYSQL_FIELD信息?
在field中有一个MYSQL_FIELD*类型的MYSQL_STMT成员,但手册中写着:
MYSQL_STMT结构没有用于应用程序的成员。
有几个函数采用MYSQL_RES,如mysql_fetch_fields,但我没有MYSQL_RES,有MYSQL_STMT
发布于 2012-08-21 05:11:50
如果您正在使用准备语句,您应该准确地知道每个字段的类型和大小,以便准备MYSQL_BIND数组。
下面的代码片段摘自文档
MYSQL_BIND bind[4]; // 4 columns
MYSQL_TIME ts;
unsigned long length[4];
int param_count, column_count, row_count;
short small_data;
int int_data;
char str_data[STRING_SIZE];
my_bool is_null[4];
my_bool error[4];
/* Bind the result buffers for all 4 columns before fetching them */
memset(bind, 0, sizeof(bind));
/* INTEGER COLUMN */
bind[0].buffer_type= MYSQL_TYPE_LONG;
bind[0].buffer= (char *)&int_data;
bind[0].is_null= &is_null[0];
bind[0].length= &length[0];
bind[0].error= &error[0];
/* STRING COLUMN */
bind[1].buffer_type= MYSQL_TYPE_STRING;
bind[1].buffer= (char *)str_data;
bind[1].buffer_length= STRING_SIZE;
bind[1].is_null= &is_null[1];
bind[1].length= &length[1];
bind[1].error= &error[1];
/* SMALLINT COLUMN */
bind[2].buffer_type= MYSQL_TYPE_SHORT;
bind[2].buffer= (char *)&small_data;
bind[2].is_null= &is_null[2];
bind[2].length= &length[2];
bind[2].error= &error[2];
/* TIMESTAMP COLUMN */
bind[3].buffer_type= MYSQL_TYPE_TIMESTAMP;
bind[3].buffer= (char *)&ts;
bind[3].is_null= &is_null[3];
bind[3].length= &length[3];
bind[3].error= &error[3];发布于 2012-08-21 04:54:56
在将变量绑定到用于获取列值的MYSQL_BIND结构之前,可以检查结果集中每一列的类型代码。如果您想确定最好使用哪种变量类型来避免类型转换,这可能是可取的。要获得类型代码,在使用mysql_stmt_result_metadata()执行准备好的语句后调用mysql_stmt_execute()。元数据提供对结果集类型代码的访问,如22.9.7.23节“mysql_stmt_result_metadata()”和22.9.1节“Data数据结构”所述。
http://dev.mysql.com/doc/refman/5.5/en/mysql-stmt-result-metadata.html
https://stackoverflow.com/questions/12048468
复制相似问题