Mysql 的疑问

foliedouding 2012-03-30 09:36:47
小第对一段程序不是很明白 程序如下
#include<my_global.h>
#include<mysql.h>
int main(int argc,char *argv)
{
MYSQL *conn;
MYSQL_RES *result;
MYSQL_ROW row;
MYSQL_FIELD * field;
int num_fields;
int i;
conn=mysql_init(NULL);
mysql_read_connect(conn,"localhost","root","dingding","testdb",0,NULL,0);
mysql_query(conn,"select * fromo friends");
result=mysql_store_result(conn);
num_fields=mysql_num_fields(result);
while((row==mysql_fetch_row(result)))
{
for(i=0;i<mysql_num_fields(result))
{
if(i==0)
{
while(field=mysql_fetch_field(result))
{
printf("%s",field->name);
}
printf("\n");
}
printf("%s",row[i]?row[i]:"NULL");
}
}
mysql_free_result(result);
mysql_close(conn);
}
问题是:
按说mysql_fetch_row(result) 来检测下一行值是否存在,应该是有多少行记录就循环多少次,为什在打印字段的时候只是在
开始的时候打印一行字段名字呢 是不是field=mysql_fetch_field(result) 在打印完字段名字后 下次循环返回NULL
小弟这个地方确实搞不太懂,请高手指定.......
...全文
61 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
root_jli 2012-03-30
  • 打赏
  • 举报
回复
while((field==mysql_fetch_field(result)))
root_jli 2012-03-30
  • 打赏
  • 举报
回复
MYSQL my_connection; /*这是一个数据库连接*/
int res; /*执行sql語句后的返回标志*/
MYSQL_RES *res_ptr; /*指向查询结果的指针*/
MYSQL_FIELD *field; /*字段结构指针*/
MYSQL_ROW result_row; /*按行返回的查询信息*/

int row, column; /*查询返回的行数和列数*/
int i, j; /*只是控制循环的两个变量*/

/*初始化mysql连接my_connection*/
mysql_init(&my_connection);

/*这里就是用了mysql.h里的一个函数,用我们之前定义的那些宏建立mysql连接,并
返回一个值,返回不为空证明连接是成功的*/
if (mysql_real_connect(&my_connection, HOST, USERNAME, PASSWORD,
DATABASE, 0, NULL, CLIENT_FOUND_ROWS)) {/*连接成功*/

printf("数据库查询query_sql连接成功!n");

/*这句话是设置查询编码为utf8,这样支持中文*/
mysql_query(&my_connection, "set names utf8");

/*下面这句话就是用mysql_query函数来执行我们刚刚传入的sql語句,
这会返回一个int值,如果为0,证明語句执行成功*/
res = mysql_query(&my_connection, sql);

if (res) { /*现在就代表执行失败了*/
printf("Error: mysql_query !n");
/*不要忘了关闭连接*/
mysql_close(&my_connection);
} else { /*现在就代表执行成功了*/
/*将查询的結果给res_ptr*/
res_ptr = mysql_store_result(&my_connection);

/*如果结果不为空,就把结果print*/
if (res_ptr) {
/*取得結果的行数和*/
column = mysql_num_fields(res_ptr);
row = mysql_num_rows(res_ptr) + 1;
printf("查询到 %lu 行 n", row);

/*输出結果的字段名*/
for (i = 0; field = mysql_fetch_field(res_ptr); i++)
printf("%st", field->name);
printf("n");

/*按行输出結果*/
for (i = 1; i < row; i++) {
result_row = mysql_fetch_row(res_ptr);
for (j = 0; j < column; j++)
printf("%st", result_row[j]);
printf("n");
}

}

/*不要忘了关闭连接*/
mysql_close(&my_connection);
}
}
foliedouding 2012-03-30
  • 打赏
  • 举报
回复
我上面写错了 应该是 while((row=mysql_fetch_row(result))) while(field=mysql_fetch_field(result)) 这句就是这样的.....

23,117

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧