Подскажите как сделать чтобы функция возвращала кол-во строк. PHP: GetDisconnectedPlayers() { decl String:query[255]; Format(query, sizeof(query), "SELECT * FROM disconnected_players WHERE matchid = '%d'", g_MatchId); SQL_TQuery(g_SQL, SQL_GetDisconnectedPlayers, query);}
Ну если нам это надо применить к ответу от бд, то просто головой подумай где и как это применять)) В твоём варианте: PHP: public SQL_GetDisconnectedPlayers(Handle:owner, Handle:hndl, const String:error[], any:userid) { if(hndl == INVALID_HANDLE) LogError("Sql error: %s", error); else { new iRowCount = SQL_GetRowCount(hndl); } }
А через потоковый запрос не получится так сделать. По-твоему желанию должно быть примерно так: PHP: GetDisconnectedPlayers() { decl String:query[255]; Format(query, sizeof(query), "SELECT * FROM disconnected_players WHERE matchid = '%d'", g_MatchId); new Handle:hResult = SQL_Query(g_SQL, query); if(hResult == INVALID_HANDLE) return -1; new iRowCount = SQL_GetRowCount(hResult); CloseHandle(hResult); return iRowCount;} Вернёт значение '-1' - значит ошибка бд. Но я бы не рекомендовал делать запросы к бд таким методом. Пробуй делать варианты, при которых бд не будет возвращать неизвестное количество строк. Код: SELECT [COLOR="Red"][B]count(*)[/B][/COLOR] FROM disconnected_players WHERE matchid = '%d'
denj, кажется в том что плагин тормозится и ожидает ответа от сервера с бд. Что мешает сделать так: PHP: GetDisconnectedPlayers() { decl String:query[255]; Format(query, sizeof(query), "SELECT count(*) FROM disconnected_players WHERE matchid = '%d'", g_MatchId); SQL_TQuery(g_SQL, SQL_GetDisconnectedPlayers, query); } public SQL_GetDisconnectedPlayers(Handle:owner, Handle:hndl, const String:error[], any:userid) { if(hndl == INVALID_HANDLE) LogError("Sql error: %s", error); else { PrintToServer("%d", SQL_GetRowCount(hndl)); } } Результат будет почти мгновенным, зато безопаснее и без лагов.
Ну начиная с самого запроса. Mysql поддерживает целую кучу функций и операторов, в том числе функцию count(). При использовании этой функции бд вернёт всего одно поле с одной цифрой, а не n полей, которые надо посчитать. Вторая причина - верно, при использовании функции SQL_Query() функция зависает в ожидании ответа от сервера бд, что может вызвать подвисание игрового сервера. Лучше использовать потоковый запрос через SQL_TQuery().
Еще я хотел делать так: PHP: if (!GetDisconnectedPlayers()){/*код*/}else{/*код*/} Как лучше всего это реализовать?