fuh::mysql_result fuh::db_query(const std::string& sql) { if(mysql_query(conn, sql.c_str())) { WRN_UH << "not connected to database, reconnecting..." << std::endl; //Try to reconnect and execute query again if(!mysql_real_connect(conn, db_host_.c_str(), db_user_.c_str(), db_password_.c_str(), db_name_.c_str(), 0, NULL, 0) || mysql_query(conn, sql.c_str())) { ERR_UH << "Could not connect to database: " << mysql_errno(conn) << ": " << mysql_error(conn) << std::endl; throw error("Error querying database."); } } return mysql_result(mysql_store_result(conn), result_deleter()); }
site_info collect_info(char *site) { MYSQL mysql, *conn; MYSQL_RES *site_name_result; MYSQL_RES *site_domain_result; MYSQL_ROW site_domain_row; char *site_name; char *site_id_tmp; char site_name_sql[LEN_1024] = {0}; char site_domain_sql[LEN_1024] = {0}; int site_id; int master_id; /* 动态分配site相关信息内存 */ site_info info; if ((info = malloc(sizeof(struct info_list))) == NULL) { printf("info构动态分配内存错误\n"); exit(1); } /* 数据库信息 */ const char *ip = "192.168.56.101"; const char *db_pawd = "123456"; int port = 3306; /* 临时site */ char site_tmp[LEN_16] = {0}; strncpy(site_tmp, site, strlen(site)); /* 获得site_name和site_id */ site_name = strtok(site_tmp, SITE_DELIMITER); site_id_tmp = strtok(NULL, SITE_DELIMITER); site_id = atoi(site_id_tmp); /* 初始mysql句柄结构 */ mysql_init(&mysql); /* 连接mysql */ mysql_init(&mysql); if ((conn = mysql_real_connect(&mysql, ip, "root", db_pawd, "web_check", port, NULL, 0)) == NULL) { if (mysql_error(&mysql)) fprintf(stderr, "connection error %d : %s\n", mysql_errno(&mysql), mysql_error(&mysql)); printf("Fail to connect mysql, ip:%s\tport:%d\n", ip, port); exit(1); } /* 查询site_name结果 */ sprintf(site_name_sql, "select * from %s where site like \'%%%s%%\'", INDEPENDENT, site_name); site_name_result = mysql_result(conn, site_name_sql); /* 查询site_id结果 */ master_id = handle_site_id(info, site_name_result, site_id); /* 查询domain结果 */ sprintf(site_domain_sql, "select * from %s where site_name = \'%s\'", COMMON, site_name); site_domain_result = mysql_result(conn, site_domain_sql); while ((site_domain_row = mysql_fetch_row(site_domain_result))) { info->domain = (char *)calloc(LEN_16, sizeof(char)); strncpy(info->domain, site_domain_row[2], strlen(site_domain_row[2])); /* 域名是否绑定 */ if ((atoi(site_domain_row[4])) == 1) { info->site_id = site_id; } else { info->site_id = master_id; } } if ((info->telecom_ip == NULL) || (strlen(info->telecom_ip) == 0)) { printf("您输入的区不存在,请检查!\n"); exit(1); } return info; }