源文件:
#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(&mysql,query) != 0)
37{
38return;
39}
40res = mysql_store_result(&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(&mysql,query) != 0)
60{
61return;
62}
63
64res = mysql_store_result(&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") <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>