Поврежденная таблица mysql, причиной сбоя в mysql.h (c ++) - PullRequest
1 голос
/ 14 июня 2010

Я создал очень простой класс mysql в c +, но когда происходит сбой 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 Ответ

1 голос
/ 14 июня 2010

Вам необходимо проверить возвращаемое значение mysql_store_result() - оно может быть NULL.

http://dev.mysql.com/doc/refman/5.0/en/mysql-store-result.html

mysql_store_result () возвращает нулевой указатель, если инструкция не выполняласьt вернуть набор результатов (например, если это был оператор INSERT).

mysql_store_result () также возвращает нулевой указатель, если чтение набора результатов не удалось.Вы можете проверить, произошла ли ошибка, проверив, возвращает ли mysql_error () непустую строку, mysql_errno () возвращает ненулевое значение или mysql_field_count () возвращает ноль.

Вероятно, это не проблема с повреждением базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...