mysql.h损坏,导致mysql.h崩溃(c ++)

时间:2010-06-14 09:52:23

标签: c++ mysql c

我在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检查..

感谢, 弗朗西斯

1 个答案:

答案 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()返回零。

数据库损坏可能不是问题。