当前位置: 技术问答>linux和unix
C连接MySQL的问题?
来源: 互联网 发布时间:2015-07-01
本文导语: 源文件: #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_connec...
源文件:
#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("%sn",phonelist);
}
头文件
#include
#include
#include
#include
MYSQL mysql;
MYSQL_RES *res;
MYSQL_ROW row;
char query[80];
/* --------------Function List -------------- */
int db_connect(char* db_name);
int update_state(char* tel,char* states);
void select_telephone(void);
void close_db(void);
/* -------------------------------------------*/
编译使用 gcc -o zmesql zmesql.c -L/usr/lib/mysql -lmysqlclient -lz
但是运行时出现错误:
segmentation fault
我使用gdb 调试
其中有行为select_telephone();
请问这是什么原因?
#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("%sn",phonelist);
}
头文件
#include
#include
#include
#include
MYSQL mysql;
MYSQL_RES *res;
MYSQL_ROW row;
char query[80];
/* --------------Function List -------------- */
int db_connect(char* db_name);
int update_state(char* tel,char* states);
void select_telephone(void);
void close_db(void);
/* -------------------------------------------*/
编译使用 gcc -o zmesql zmesql.c -L/usr/lib/mysql -lmysqlclient -lz
但是运行时出现错误:
segmentation fault
我使用gdb 调试
其中有行为select_telephone();
请问这是什么原因?
|
void select_telephone()
{
if(mysql_query(&mysql,query) != 0)
{
return;
}
res = mysql_store_result(&mysql);
if(row = mysql_fetch_row(res))
{
strcpy(phonelist,row[0]);
}
mysql_free_result(res);
}
{
if(mysql_query(&mysql,query) != 0)
{
return;
}
res = mysql_store_result(&mysql);
if(row = mysql_fetch_row(res))
{
strcpy(phonelist,row[0]);
}
mysql_free_result(res);
}
|
第一 db_connect() 中没有判断 mysql_init() 成功否
第二在调 db_connect()后没有判断数据库打开成功否,就已经开始用了
其它的还没仔细看
第二在调 db_connect()后没有判断数据库打开成功否,就已经开始用了
其它的还没仔细看
|
.h文件中做如下修改
query[1024];
*******************
.c文件做如下修改
void select_telephone()
{
memset(query, 0, 1024);
sprintf(query,"SELECT telephone,dialmonth FROM phonelist WHERE state = 'Y'");
if(mysql_query(&mysql,query) != 0)
{
return;
}
res = mysql_store_result(&mysql);
if(row = mysql_fetch_row(res))
{
strcpy(phonelist,row[0]);
}
mysql_free_result(res);
}
int main(void)
{
if(db_connect("zivr")
query[1024];
*******************
.c文件做如下修改
void select_telephone()
{
memset(query, 0, 1024);
sprintf(query,"SELECT telephone,dialmonth FROM phonelist WHERE state = 'Y'");
if(mysql_query(&mysql,query) != 0)
{
return;
}
res = mysql_store_result(&mysql);
if(row = mysql_fetch_row(res))
{
strcpy(phonelist,row[0]);
}
mysql_free_result(res);
}
int main(void)
{
if(db_connect("zivr")