免费注册 查看新帖 |

Chinaunix

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

請教c連mysql問題...先謝過. [更新了] [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-02-07 12:55 |只看该作者 |倒序浏览
各位好,
小弟初初學用c編mysql程序, 有以下問題出現.

先介紹我的資庫, password 我就不貼出來, 是用 PASSWORD('xxx') 做出來的.

  1. info
  2. +-------+--------+---------------+
  3. | name |    id    |  password  |
  4. +-------+--------+---------------+
  5. |  CKW |  001   | .................. |
  6. +-------+--------+---------------+
  7. | MJLU  | KK91 | .................. |
  8. +-------+--------+---------------+
复制代码


以下介紹我的程序, 省缺錯誤顯示以方便顯示問題所在:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <mysql/mysql.h>

  4. #define MYSQL_HOST "localhost"
  5. #define MYSQL_USER "tester"
  6. #define MYSQL_PASS "123"
  7. #define MYSQL_DB "test_db"

  8. MYSQL *mysql;
  9. MYSQL_RES *ret;
  10. MYSQL_ROW row;

  11. int main(void)
  12. {
  13.         char sql[100] = "select name, id from info";
  14.         int num_field;

  15.         mysql = mysql_init(NULL);
  16.        if(mysql == NULL)
  17.               /*** error ***/
  18.         if(mysql_real_connect(mysql, MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_DB, 0, NULL, 0) == NULL)
  19.         {
  20.               /*** error ***/
  21.         }        
  22.         
  23.         if(mysql_query(mysql, sql) != 0)
  24.         {
  25.                 fprintf(stderr, "Error on select query!\n");
  26.                 exit(1);
  27.         }
  28.         
  29.         if(!(ret = mysql_store_result(mysql)))
  30.                 fprintf(stderr, "Error store result!\n");

  31.         num_field = mysql_num_fields(ret);
  32.         row = mysql_fetch_row(ret);
  33.         for(i=0; i<num_field; i++)
  34.                 fprintf(stdout, "==>%s<==\n", row[i]);


  35.         mysql_free_result(ret);
  36.         mysql_close(mysql);

  37.         return 0;
  38. }
复制代码


以上程序是可以顯示的無誤的, 但若果我把sql改成select sf_name, sf_id from staff_info where id='001'時, 就會出現Segmentation fault.

我的原意是要把 select 後的 CKW 顯示出來作以後之用. 請各位指教.

thanks

[ 本帖最后由 惠繪洋 于 2006-2-8 11:57 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-02-07 16:45 |只看该作者
表搞错了吧?
没看到有sf_name, sf_id这两个字段啊

另外id是不是应该变成[id],字段类型是否正确?

或者这段sql是否能够直接在mysql上直接运行?

好久没弄mysql了,提提想法而已

论坛徽章:
0
3 [报告]
发表于 2006-02-08 11:55 |只看该作者
謝謝, 對, 個表的名稱有改動.. 但這問題已經解決了, 可以 sql = "select * from db where name='xxx' and id='xxx'; 完成的.

但現請教另一個問題, 當我去建立新的database時出現以下錯誤:

  1. MYSQL *mysql;

  2. mysql_init(NULL);
  3. mysql_real_connect(...........);

  4. mysql_create_db(mysql, "Hello");

  5. mysql_close(mysql);
复制代码


編譯時出現

  1. .....
  2. mysql.c:79: warning: implicit declaration of function `mysql_create_db'
  3. .....
  4. undefined reference to `mysql_create_db'
  5. .....
复制代码


請問是什麼原因呢. thanks.

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2006-02-08 12:03 |只看该作者
#ifdef USE_OLD_FUNCTIONS
MYSQL *     STDCALL mysql_connect(MYSQL *mysql, const char *host,
                      const char *user, const char *passwd);
int     STDCALL mysql_create_db(MYSQL *mysql, const char *DB);
int     STDCALL mysql_drop_db(MYSQL *mysql, const char *DB);


需要#define USE_OLD_FUNCTIONS

论坛徽章:
0
5 [报告]
发表于 2006-02-08 12:06 |只看该作者
原帖由 mq110 于 2006-2-8 12:03 发表
#ifdef USE_OLD_FUNCTIONS
MYSQL *     STDCALL mysql_connect(MYSQL *mysql, const char *host,
                      const char *user, const char *passwd);
int     STDCALL mysql_create_db(MYSQL *mys ...


謝謝mq110, 這是否由於我是使用mysql 4的問題呢...
若果我不使用這個mysql_create_db方法, 用回, mysql_query(mysql, "create database xxx") 也可以嗎, 在二者上對編程那一個會好些呢?? 謝謝, 再請教.

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
6 [报告]
发表于 2006-02-08 12:10 |只看该作者
原帖由 惠繪洋 于 2006-2-8 12:06 发表


謝謝mq110, 這是否由於我是使用mysql 4的問題呢...
若果我不使用這個mysql_create_db方法, 用回, mysql_query(mysql, "create database xxx" 也可以嗎, 在二者上對編程那一個會好些呢?? 謝謝, 再 ...


mysql_query(mysql, "create database xxx"  这样的写法 我没试过.猜测应该是可以.你可以去试试

我对版本也不关心.

#define USE_OLD_FUNCTIONS 好用了吗?

论坛徽章:
0
7 [报告]
发表于 2006-02-08 12:46 |只看该作者
原帖由 mq110 于 2006-2-8 12:10 发表


mysql_query(mysql, "create database xxx"  这样的写法 我没试过.猜测应该是可以.你可以去试试

我对版本也不关心.

#define USE_OLD_FUNCTIONS 好用了吗?


我還未去試用, 我只用mysql_query, 把需要的用query代替了, 這個人比較覺得安全些

但先謝謝你指導...

但又發現, 若依你所講需要加入USE_OLD_FUNCTIONS 而先用ifdef 先定義, 那麼即所有我需要的 mysql function都要重新定義一次... 但為什麼我看mysql上的c api時, 並沒有提及此事呢....
但我現在都沒有重新定義, mysql_init, mysql_query, mysql_real_connect等都可以正確使用, 單單只有mysql_create_db時有問題... 奇怪.

[ 本帖最后由 惠繪洋 于 2006-2-8 13:00 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2006-02-08 16:11 |只看该作者
在一些高的mysql版本中,一些不推荐使用的函数在libmysqlclient.a中已经不提供了,像mysql_create_db,myql_conncet等

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
9 [报告]
发表于 2006-02-08 18:13 |只看该作者
原帖由 惠繪洋 于 2006-2-8 12:46 发表


我還未去試用, 我只用mysql_query, 把需要的用query代替了, 這個人比較覺得安全些

但先謝謝你指導...

但又發現, 若依你所講需要加入USE_OLD_FUNCTIONS 而先用ifdef 先定義, 那麼即所有我需 ...


编译连接的时候加 -DUSE_OLD_FUNCTIONS 定义一次就行了。
ps: 我也是看了头文件才知道的。你去看看mysql/mysql.h吧.

论坛徽章:
0
10 [报告]
发表于 2006-02-09 11:04 |只看该作者
原帖由 tchhyc 于 2006-2-8 16:11 发表
在一些高的mysql版本中,一些不推荐使用的函数在libmysqlclient.a中已经不提供了,像mysql_create_db,myql_conncet等


謝謝, 那麼高版的mysql用什麼來實現 mysql_create_db等呢..thx
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP