2014-11-28 2 views
0

Есть два круга этих вопросов, которые я знаю, но ни один из них не был похож на мою проблему, поэтому я решил, что спрошу. У меня настроен сервер, который проверяет клиентов, которые подключаются к нему, получая комбинации имени пользователя и пароля и проверяя их с помощью SQL-запроса. Я написал систему, и она работала отлично в течение первых двух запросов.MySQL Api: Потерянное соединение с сервером MySQL во время запроса

http://puu.sh/d9mss/384b4df9f0.png

Однако, я обнаружил, что если я ждать около 5 минут, а затем повторите попытку подключения, это происходит.

http://puu.sh/d9mx7/192cbb2cfc.png

Это код, который я бегу, чтобы выполнить эту задачу.

bool CNetDatabase::AuthUser(std::string username, const unsigned char* passwordhash) 
{ 
RoughSanitizeString(username);  //this doesn't do anything 


/* Turn password hash into string */ 
std::ostringstream password; 
password.fill('0'); 
password << std::hex; 
for (int i = 0; i < 20; i++) 
{ 
    password << std::setw(2) << (unsigned int)passwordhash[i]; 
} 


/* Make request */ 
MYSQL_RES* result = nullptr; 
if (mysql_query(sql_con, tools::string::format(
    "SELECT COUNT(`index`) FROM `Users` WHERE `username` = '%s' AND `password` = '%s'", 
    username.c_str(), password.str().c_str()).c_str())) 
{ 
    fprintf(
     stderr, 
     "ERROR: mysql_query failed: %s [%d]\n", 
     mysql_error(sql_con), mysql_errno(sql_con)); 

    return false; 
} 


/* Get and return result */ 
result = mysql_store_result(sql_con); 
MYSQL_ROW row = mysql_fetch_row(result); 
mysql_free_result(result); 
return row[0][0] == '1' ? true : false; 
} 

Любые идеи о том, что может произойти неправильно?

+0

Не нужно включать текстовый вывод в качестве изображений. Просто скопируйте его в свой пост и отформатируйте как «код»; вставьте '' на отдельной строке перед тем, чтобы игнорировать подсветку синтаксиса. – usr2564301

ответ

0

При дальнейших расследованиях, я думаю, можно с уверенностью заключить, что это проблема моего хозяина, а не мой код. Я зарегистрировал учетную запись на сайте, предлагающем возможность создавать бесплатные базы данных MySQL, и мой сервер бросает на него SQL-запросы без проблем всю ночь. Для потомков, если вы используете SQL-сервер своего сайта и размещаете Hostgator, это может вызвать проблему.

0

Проверить MySQL manual. Время ожидания сеанса равно как на стороне клиента, так и на стороне сервера.

В любом случае, следует надеяться, что подключение к внешним ресурсам может стать недоступным и попытаться подключиться (например, сервер базы данных может быть физически перезагружен). Вы можете установить флаг reconnect при создании соединения для включения автоматического повторного подключения, но это может не всегда работать в зависимости от вашей среды.

+0

Так было, проблема только в том, что он только сбрасывается после неудачной попытки. Это означает, что пользователю нужно будет сделать запрос дважды, чтобы войти в систему. Я начинаю подозревать, что это проблема моего хоста, а не моя, собирается протестировать локальную базу данных sql и отправить ее позже. –

Смежные вопросы