bool db_mysql::sql_select(const char* sql) { if (sane_mysql_query(sql) == false) return false; MYSQL_RES *my_res = __mysql_store_result(conn_); if (my_res == NULL) { if (__mysql_errno(conn_) != 0) { logger_error("db(%s), sql(%s) error(%s)", dbname_, sql, __mysql_error(conn_)); close(); } return false; } my_ulonglong nrow = __mysql_num_rows(my_res); if (nrow <= 0) { __mysql_free_result(my_res); result_ = NULL; return true; } result_ = NEW db_mysql_rows(my_res); return true; }
bool db_mysql::tbl_exists(const char* tbl_name) { if (conn_ == NULL) { logger_error("db(%s) not opened yet", dbname_); return false; } char sql[256]; safe_snprintf(sql, sizeof(sql), "show tables like '%s'", tbl_name); if (sane_mysql_query(sql) == false) return false; MYSQL_RES *my_res = __mysql_store_result(conn_); if (my_res == NULL) { if (__mysql_errno(conn_) != 0) { logger_error("db(%s), sql(%s) error(%s)", dbname_, sql, __mysql_error(conn_)); close(); } return false; } bool ret; if (__mysql_num_rows(my_res) > 0) ret = true; else ret = false; __mysql_free_result(my_res); return ret; }
static void mysql_rows_free(void* ctx) { MYSQL_RES* my_res = (MYSQL_RES*) ctx; #ifdef HAS_MYSQL_DLL if (my_res && __mysql_dll) #else if (my_res) #endif __mysql_free_result(my_res); }
bool db_mysql::sql_select(const char* sql, db_rows* result /* = NULL */) { // 优先调用基类方法释放上次的查询结果 free_result(); if (sane_mysql_query(sql) == false) return false; MYSQL_RES *my_res = __mysql_store_result(conn_); if (my_res == NULL) { if (__mysql_errno(conn_) != 0) { logger_error("db(%s), sql(%s) error(%s)", dbname_, sql, __mysql_error(conn_)); close(); } return false; } my_ulonglong nrow = __mysql_num_rows(my_res); if (nrow <= 0) { __mysql_free_result(my_res); result_ = NULL; return true; } if (result != NULL) mysql_rows_save(my_res, *result); else { result_ = NEW db_rows(); mysql_rows_save(my_res, *result_); } return true; }
~db_mysql_rows() { __mysql_free_result(my_res_); }