C连接MySQL的问题?

源文件:
#include "sql.h"

char *user_name = "root";
char *user_pass = "root";
char databasename = "zivr";
char phonelist[20]={0};
MYSQL
result;

/*
*

  • DATABASE CONNECT

/
int db_connect(char
db_name)
{
mysql_init(&mysql);
result = mysql_real_connect(&mysql,"localhost",user_name,user_pass,db_name,0,NULL,0);
if(result)
return 0;
else
return -1;
}
/*
*

  • UPDATE STATE

*/

int update_state(char* tel,char* states)
{
sprintf(query,"UPDATE phonelist SET state = '%s' WHERE telephone = '%s'",states,tel);
mysql_real_query(&mysql,query,(unsigned int)strlen(query));
res = mysql_use_result(&mysql);
mysql_free_result(res);
}
/*

  • SELECT TELEPHONE FROM TABLE

*/

void select_telephone()
{
sprintf(query,"SELECT telephone,dialmonth FROM phonelist WHERE state = 'Y'");
mysql_real_query(&mysql,query,(unsigned int)strlen(query));
res = mysql_use_result(&mysql);
//while(row = mysql_fetch_row(res))
row = mysql_fetch_row(res);
strcpy(phonelist,row[0]);
mysql_free_result(res);

}
void close_db(void)
{
mysql_free_result(res);
}

int main(void)
{
db_connect("zivr");
select_telephone();
printf("%s\n",phonelist);
}
头文件

#include

 1<unistd.h>   
 2#include <stdio.h>   
 3#include <string.h>   
 4#include <mysql mysql.h="">   
 5  
 6MYSQL mysql;   
 7MYSQL_RES *res;   
 8MYSQL_ROW row;   
 9  
10char query[80];   
11  
12/* --------------Function List -------------- */   
13int db_connect(char* db_name);   
14int update_state(char* tel,char* states);   
15void select_telephone(void);   
16void close_db(void);   
17  
18/* -------------------------------------------*/   
19  
20编译使用 gcc -o zmesql zmesql.c -L/usr/lib/mysql -lmysqlclient -lz   
21但是运行时出现错误:   
22segmentation fault   
23我使用gdb 调试   
24其中有行为select_telephone();   
25请问这是什么原因?   
26\---------------------------------------------------------------   
27  
28第一 db_connect() 中没有判断 mysql_init() 成功否   
29第二在调 db_connect()后没有判断数据库打开成功否,就已经开始用了   
30其它的还没仔细看   
31  
32\---------------------------------------------------------------   
33  
34void select_telephone()   
35{   
36if(mysql_query(&amp;mysql,query) != 0)   
37{   
38return;   
39}   
40res = mysql_store_result(&amp;mysql);   
41  
42if(row = mysql_fetch_row(res))   
43{   
44strcpy(phonelist,row[0]);   
45}   
46mysql_free_result(res);   
47}   
48\---------------------------------------------------------------   
49  
50.h文件中做如下修改   
51query[1024];   
52*******************   
53.c文件做如下修改   
54void select_telephone()   
55{   
56memset(query, 0, 1024);   
57sprintf(query,"SELECT telephone,dialmonth FROM phonelist WHERE state = 'Y'");   
58  
59if(mysql_query(&amp;mysql,query) != 0)   
60{   
61return;   
62}   
63  
64res = mysql_store_result(&amp;mysql);   
65  
66if(row = mysql_fetch_row(res))   
67{   
68strcpy(phonelist,row[0]);   
69}   
70mysql_free_result(res);   
71}   
72  
73int main(void)   
74{   
75if(db_connect("zivr") &lt;0)   
76{   
77printf("conn err\n");   
78return 0;   
79}   
80  
81select_telephone();   
82printf("%s\n",phonelist);   
83}   
84\---------------------------------------------------------------   
85  
86你调用接口都不判断返回值?</mysql></string.h></stdio.h></unistd.h>
Published At
Categories with 服务器类
Tagged with
comments powered by Disqus