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; }
int db_mysql::get_errno() const { if (conn_) return __mysql_errno(conn_); else return -1; }
bool db_mysql::sane_mysql_query(const char* sql) { if (conn_ == NULL) { logger_error("db(%s) not opened yet!", dbname_); return false; } if (__mysql_query(conn_, sql) == 0) return true; int errnum = __mysql_errno(conn_); if (errnum != CR_SERVER_LOST && errnum != CR_SERVER_GONE_ERROR) { logger_error("db(%s): sql(%s) error(%s)", dbname_, sql, __mysql_error(conn_)); return false; } /* 重新打开MYSQL连接进行重试 */ close(); if (open("GBK") == false) { logger_error("reopen db(%s) error", dbname_); return false; } if (__mysql_query(conn_, sql) == 0) return true; logger_error("db(%s), sql(%s) error(%s)", dbname_, sql, __mysql_error(conn_)); close(); return false; }
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; }