基本的增删改查操作:
#include
#include
#include
void error_quit(const char *str,MYSQL *conn_ptr){
fprintf(stderr,"%s\n erron:%d\n error:%s\n sqlstat:%s\n",str,mysql_errno(conn_ptr),mysql_error(conn_ptr),mysql_sqlstate(conn_ptr));
if(conn_ptr!=NULL){
mysql_close(conn_ptr);
}
free(conn_ptr);
exit(0);
}
void free_conn(MYSQL *mysql){
mysql_close(mysql);
free(mysql);
}
void insert_chang(MYSQL *my_con){
int res;
res=mysql_query(my_con,"insert into emp values(3,'changlq',18000.0)");
if(res != 0){
error_quit("insert fail",my_con);
}
printf("affected rows:%d\n",mysql_affected_rows(my_con));
printf("last insertid:%d\n",mysql_insert_id(my_con));
}
void update_chang(MYSQL *my_con){
int res;
res=mysql_query(my_con,"update emp set sal=28000.0 where id=3");
if(res != 0){
error_quit("update fail",my_con);
}
printf("affected rows:%d\n",mysql_affected_rows(my_con));
}
void delete_chang(MYSQL *my_con){
int res;
res=mysql_query(my_con,"delete from emp where id=3");
if(res != 0){
error_quit("delete fail",my_con);
}
printf("affected rows:%d\n",mysql_affected_rows(my_con));
}
void select_mysql(MYSQL *my_con){
MYSQL_RES *my_res; //查询结果
MYSQL_FIELD *my_field;//结果中字段信息
MYSQL_ROW my_row;//结果中数据信息
unsigned long *lengths;
int cols,res,i;
//获取整个表内容
int num=1;
char sql_str[]="select * from emp where id>=%d";
printf("[%s]\n",sql_str);
sprintf(sql_str,sql_str,num);
printf("[%s]\n",sql_str);
res=mysql_query(my_con,sql_str);
if(res!=0) error_quit("select fail",my_con);
//从服务端取回结果,mysql_store_result会把数据全部拉到客户端,mysql_use_result则不会
my_res=mysql_store_result(my_con);
if(my_res==NULL) error_quit("mysql_store_result fail",my_con);
//获取记录数:mysql_row_seek(),mysql_data_seek(),mysql_num_rows只有在用mysql_store_result才可以使用
printf("num rows:%d\n",mysql_num_rows(my_res));
//获取列数
cols=mysql_num_fields(my_res);
printf("num cols:%d\n",cols);
//获取字段信息
my_field=mysql_fetch_fields(my_res);
for(i=0;i<cols;i++) printf("%s\t",my_field[i].name);
printf("\n");
//字段类型%d
for(i=0;i<cols;i++) printf("%d\t",my_field[i].type);
printf("\n");
//输出查询结果
while(my_row=mysql_fetch_row(my_res)){
for(i=0;i<cols;i++){
//数据长度
lengths=mysql_fetch_lengths(my_res);
printf("%s(%lu)\t",my_row[i],lengths[i]);
}
printf("\n");
}
mysql_free_result(my_res);
}
int main(){
/*
gcc -o chang_mysql mysql_access.c -L /usr/lib64/mysql -lmysqlclient
*/
MYSQL *conn_ptr=(MYSQL *)malloc(sizeof(MYSQL));
conn_ptr=mysql_init(conn_ptr);
if(!conn_ptr){
printf("mysql_init error\n");
return -1;
}
//conn_ptr=mysql_real_connect(conn_ptr,"127.0.0.1","root","123456","db_chang",3306,NULL,0);
conn_ptr=mysql_real_connect(conn_ptr,"127.0.0.1","root","123456","chang_dep",0,NULL,0);
if(conn_ptr){
printf("connect success!\n");
}else{
printf("connect fail![errno:%d][error:%s][sqlstat:%s]\n",mysql_errno(conn_ptr),mysql_error(conn_ptr),mysql_sqlstate(conn_ptr));
}
mysql_query(conn_ptr,"set names utf8");
//select
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
select_mysql(conn_ptr);
//insert
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
insert_chang(conn_ptr);
select_mysql(conn_ptr);
//update
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
update_chang(conn_ptr);
select_mysql(conn_ptr);
//delete
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
delete_chang(conn_ptr);
select_mysql(conn_ptr);
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
free_conn(conn_ptr);
return 0;
}