Сообщение от
DeimoS
MySQL поддерживает и однопоточные запросы (отправил запрос и тут же его обработал). Автор темы начал плясать в верном направлении, но не смог добить до конца...
PHP код:
stock MySQLGetPlayerParam(name[], param[])
{
new query[128],
value[56],
Name[MAX_PLAYER_NAME],
Param[50];
mysql_real_escape_string(name, Name);
mysql_real_escape_string(param, Param);
format(query, sizeof(query), "SELECT `%s` FROM `Accounts` WHERE `NickName` = '%s' LIMIT 1", Param, Name);
new Cache:result = mysql_query(connects, query);
cache_get_row(0, Param, value, connects, MAX_PLAYER_NAME);
cache_delete(result);
return value;
}
Примерно, так. Но подобная функция (пытаться грузить каждый столбец отдельным запросом) - зашквар полный.
спасибо большое
- - - Добавлено - - -
Сообщение от
Redsan
Нельзя в стоке делать запрос и сразу же кэшировать полученный результат. Результат нужно кэшировать в отдельном паблике.
Пример:
PHP код:
// представим что это какой-то сток
GetPlayerName(playerid, pInfo[playerid][pName], MAX_PLAYER_NAME);
new query_string[49+MAX_PLAYER_NAME-4];
format(query_string, sizeof(query_string), "SELECT * FROM `accounts` WHERE `player_name` = '%s'", pInfo[playerid][pName]);
mysql_function_query(mysql_connect_id, query_string, true, "FindPlayerInTable","i", playerid);
PHP код:
forward FindPlayerInTable(playerid);
public FindPlayerInTable(playerid)
{
new rows, fields;
cache_get_data(rows, fields);
if(!rows)
{
ShowPlayerDialog(playerid, dRegister, DIALOG_STYLE_INPUT, "Регистрация нового пользователя", "Введите пароль для регистрации нового аккаунта:", "Регистрация", "Выход");
}
else
{
ShowPlayerDialog(playerid, dLogin, DIALOG_STYLE_INPUT, "Авторизация", "Введите пароль от аккаунта для того, чтоб продолжить игру:", "Вход", "Выход");
cache_get_field_content(0, "password", pInfo[playerid][pPassword], mysql_connect_id, 31);
}
return 1;
}
Что ты скажешь на это?
PHP код:
stock LoadATM()
{
new Cache:result = mysql_query(connects, "SELECT * FROM `bankomats` ORDER BY `bankomats`.`bID` ASC", true);
new rows,fields,time = GetTickCount();
cache_get_data(rows, fields, connects);
if(!rows) return printf("stock LoadATM() - not loaded.");
for(new idx = 1; idx <= rows; idx++)
{
Bankomat[idx][bID] = cache_get_row_int(idx-1,0, connects);
Bankomat[idx][bX] = cache_get_row_float(idx-1,1, connects);
Bankomat[idx][bY] = cache_get_row_float(idx-1,2, connects);
Bankomat[idx][bZ] = cache_get_row_float(idx-1,3, connects);
Bankomat[idx][brX] = cache_get_row_float(idx-1,4, connects);
Bankomat[idx][brY] = cache_get_row_float(idx-1,5, connects);
Bankomat[idx][brZ] = cache_get_row_float(idx-1,6, connects);
BANKOMAT[idx] = CreateObject(2754, Bankomat[idx][bX], Bankomat[idx][bY], Bankomat[idx][bZ], Bankomat[idx][brX], Bankomat[idx][brY], Bankomat[idx][brZ]);
TOTALBNKMT++;
}
printf("[ Загрузка ... ] %d - банкомата успешно загружено (%d мс)", TOTALBNKMT,GetTickCount()- time);
cache_delete(result);
return true;
}
в OnGameModeInit