我在c +中创建了一个非常简单的mysql类,但是当发生mysql崩溃时,表的索引会被破坏,我所有的c ++程序也会崩溃,因为似乎无法识别损坏的表并允许我处理问题..
Q_RES = mysql_real_query(MY_mysql, tmp_query.c_str(), (unsigned int) tmp_query.size());
if (Q_RES != 0) {
if (Q_RES == CR_COMMANDS_OUT_OF_SYNC) cout << "errorquery : CR_COMMANDS_OUT_OF_SYNC " << endl;
if (Q_RES == CR_SERVER_GONE_ERROR) cout << "errorquery : CR_SERVER_GONE_ERROR " << endl;
if (Q_RES == CR_SERVER_LOST) cout << "errorquery : CR_SERVER_LOST " << endl;
LAST_ERROR = mysql_error(MY_mysql);
if (n_retrycount < n_retry_limit) { // RETRY!
n_retrycount++;
sleep(1);
cout << "SLEEP - query retry! " << endl;
ping();
return select_sql(tmp_query);
}
return false;
}
MY_result = mysql_store_result(MY_mysql);
B_stored_results = true;
cout << "b8" << endl;
LAST_affected_rows = (mysql_num_rows(MY_result) + 1); // coult return -1
cout << "b8-1" << endl;
程序在执行“b8”之后和“b8-1”之前以“分段错误”终止 ,即使表已损坏,Q_RES也没有问题。我想知道是否有办法识别表有问题,那么我可以运行mysql修复或mysql检查..
感谢, 弗朗西斯
答案 0 :(得分:1)
您需要检查mysql_store_result()
的返回值 - 它可能为NULL。
http://dev.mysql.com/doc/refman/5.0/en/mysql-store-result.html
mysql_store_result()返回null 指针如果语句没有返回 结果集(例如,如果是 INSERT语句)。
mysql_store_result()也返回一个 如果读取结果,则为空指针 设置失败。你可以检查一下 检查是否发生错误 mysql_error()返回非空 string,mysql_errno()返回非零值, 或mysql_field_count()返回零。
数据库损坏可能不是问题。