1. MYSQL *mysql_init(MYSQL *mysql)
初始化一个类型为MYSQL的数据结构,为执行mysql_real_connect()做准备。参数mysql为指向该结构的指针,如果mysql为NULL,则新建并初始化一个MYSQL的数据结构。新建的结构将在mysql_close()中释放。
若成功,返回初始化的MYSQL数据结构的指针,否则返回NULL。
2. MYSQL *mysql_real_connect(MYSQL *mysql, const char *host,const char *user, const char *passwd, const char *db,unsigned int port, const char *unix_socket, unsigned int client_flag)
参数mysql是mysql_init()的返回值;
参数host是运行MySQL数据库引擎的机器的TCP/IP主机名,如为NULL则默认为“localhost”;
参数user和passwd是MySQL数据库的合法用户和口令;
参数db是连接的数据库名;
参数port,unix_socket和client_flag一般取默认值。
3. int mysql_query(MYSQL *mysql, const char *query)
执行query字符串中的SQL语句,query必须以0结尾。如果成功,返回0。
4. MYSQL_RES *mysql_store_result(MYSQL *mysql)
返回SELECT,SHOW,DESCRIBE, EXPLAIN等语句执行的结果。函数新建一个MYSQL_RES的数据结构,把结果存储在该结构中。如果查询没有匹配的结果,则返回空数据集。处理完结果集后,必须调用mysql_free_result()。
如果出错,返回NULL,否则返回MYSQL_RES结构的指针。
5. MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
取回结果集中的下一条记录,如果没有记录或出错,返回NULL。
一条记录中的字段数可以用mysql_num_fields(result)获得,各字段的值可以用row[0] 到 row[mysql_num_fields(result)-1]的数组来访问。
查询实例
int mysql_connect_init_ip() { strcpy(query,"select * from ip_list"); ip_list_init(&black_list); ip_list_init(&white_list); mysql_init(&mysql); if(mysql_real_connect(&mysql,HOSTNAME,USERNAME,PASSWORD,DATABASE,MYSQL_PORT,NULL,0)) { if(mysql_real_query(&mysql,query,strlen(query))==0) { result = mysql_store_result(&mysql); while((row = mysql_fetch_row(result))!=NULL) { u_int32_t ip = inet_addr(row[2]); int type=atoi(row[3]); if(type) { ip_list_add(&white_list,ip); } else ip_list_add(&black_list,ip); } mysql_free_result(result); } else { fprintf(stderr,"last_flow_rows_m query_sel_id failed:%d %s\n",mysql_errno(&mysql),mysql_error(&mysql)); return 0; } } mysql_close(&mysql); return 1; }