免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7406 | 回复: 11
打印 上一主题 下一主题

MYSQL_FIELD结构体有bug? [复制链接]

论坛徽章:
5
未羊
日期:2014-08-07 15:42:10双子座
日期:2014-09-23 15:42:172015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:55:282022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-01-02 17:49 |只看该作者 |倒序浏览
MYSQL_FIELD结构体如下:

  1. typedef struct st_mysql_field {
  2.   char *name;                        /* Name of column */
  3.   char *table;                        /* Table of column if column was a field */
  4.   char *org_table;                /* Org table name if table was an alias */
  5.   char *db;                        /* Database for table */
  6.   char *def;                        /* Default value (set by mysql_list_fields) */
  7.   unsigned long length;                /* Width of column */
  8.   unsigned long max_length;        /* Max width of selected set */
  9.   unsigned int flags;                /* Div flags */
  10.   unsigned int decimals;        /* Number of decimals in field */
  11.   enum enum_field_types type;        /* Type of field. Se mysql_com.h for types */
  12. } MYSQL_FIELD;
复制代码

这是mysql.h中C API提供的MYSQL_FIELDS结构体定义。
我通过C连接mysql成功后。想通过MYSQL_FIELDS中的成员变量获得信息,但是发现一些问题,一直搞不明白,请高手们给点意见。
一段代码:

  1. ...
  2.     MYSQL_FIELD *fd;
  3.     MYSQL_RES *res;     
  4.     while (fd= mysql_fetch_field(res))
  5.              {
  6.               printf("%s\t",fd->table);
  7.               printf("%s\t",fd->name);
  8.               printf("%s\t",fd->org_table);
  9.               printf("%s\t", fd->db) ;      
  10.              }
  11. ...
复制代码

问题是:
     printf("%s\t",fd->table);打印出来的一直是<null>,为什么是<null>?
     printf("%s\t",fd->name);打印出来的是字段的变量名(我认为没有问题)
     printf("%s\t",fd->org_table);打印出来的是表名(我认为没有问题)
     printf("%s\t", fd->db) ; 打印出来的也是表名(我非常奇怪),为什么是表名,而不是数据库名?

论坛徽章:
5
未羊
日期:2014-08-07 15:42:10双子座
日期:2014-09-23 15:42:172015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:55:282022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32
2 [报告]
发表于 2009-01-02 21:34 |只看该作者
兄弟姐妹们,怎么没人吱声呀?

论坛徽章:
0
3 [报告]
发表于 2009-01-02 21:50 |只看该作者

回复 #1 光速 的帖子

还是请您把你的代码全贴一下出来看看吧。

[ 本帖最后由 samon_fu 于 2009-1-2 22:00 编辑 ]

论坛徽章:
5
未羊
日期:2014-08-07 15:42:10双子座
日期:2014-09-23 15:42:172015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:55:282022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32
4 [报告]
发表于 2009-01-02 22:21 |只看该作者
源代码:

  1. #include <stdio.h>
  2. #include <WinSock.h>
  3. #include <mysql.h>
  4. #include <mysql_com.h>
  5. #include <mysql_version.h>
  6. #include <my_alloc.h>
  7. main()
  8. {
  9.     char mysqlServer[20] = "localhost";
  10.     char query[300];
  11.     MYSQL myData;
  12.     MYSQL_RES *res;
  13.     MYSQL_FIELD *fd;
  14.     MYSQL_ROW row;
  15.     int rowCount = 0;
  16.     int colCount = 0;
  17.     int i, j;   
  18.     //======================================


  19.    mysql_init(&myData);//  

  20.    if (!mysql_real_connect(&myData,"localhost", "root", "111111", "gkdb",3306,NULL,0))
  21.     {
  22.     printf("connect mysql error!\n");//==============连接数据库错误=================
  23.     return 0;
  24.     }
  25.    //================================================================================

  26.     sprintf(query,"select * from code_t   ");

  27.     if( mysql_query(&myData, query) != 0 )
  28.     {
  29.     printf("query error!\n");
  30.     return 0;
  31.     }else
  32.     {
  33.             res = mysql_store_result(&myData);
  34.             rowCount = (int) mysql_num_rows( res );
  35.             colCount = (int) mysql_num_fields( res );
  36.    
  37.              while (fd= mysql_fetch_field(res))
  38.              {
  39.               printf("%s\t",fd->table);
  40.               printf("%s\t",fd->name);
  41.               printf("%s\t",fd->org_table);
  42.               printf("%s\t", fd->db) ;      
  43.       
  44.              }
  45.              printf("\n");
  46.             while  (row = mysql_fetch_row(res) )
  47.             {
  48.                 for( j = 0; j < colCount; j++)
  49.                 {
  50.                    printf("[ %s ] ", row[j] );
  51.                 } // end for
  52.                 printf("\n");
  53.             }
  54.         }
  55.         mysql_free_result(res);    //释放结果集
  56.         mysql_close(&myData);

  57. }


复制代码

论坛徽章:
0
5 [报告]
发表于 2009-01-02 23:11 |只看该作者

回复 #4 光速 的帖子

请问您的mysql版本是多少?

论坛徽章:
0
6 [报告]
发表于 2009-01-02 23:49 |只看该作者
很多变量没有检查值是否合法,能确保前面变量获取的值都是正确的吗?

论坛徽章:
5
未羊
日期:2014-08-07 15:42:10双子座
日期:2014-09-23 15:42:172015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:55:282022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32
7 [报告]
发表于 2009-01-03 07:13 |只看该作者
原帖由 samon_fu 于 2009-1-2 23:11 发表
请问您的mysql版本是多少?

4.0.16

论坛徽章:
0
8 [报告]
发表于 2009-01-03 10:33 |只看该作者
你看res的值了吗

论坛徽章:
0
9 [报告]
发表于 2009-01-03 16:07 |只看该作者
version: 4.1.20

测试了一下, 没有问题

论坛徽章:
5
未羊
日期:2014-08-07 15:42:10双子座
日期:2014-09-23 15:42:172015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:55:282022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32
10 [报告]
发表于 2009-01-03 18:31 |只看该作者
原帖由 eveson 于 2009-1-3 10:33 发表
你看res的值了吗

不明白?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP