PDA

Просмотр полной версии : [Вопрос] cache_get_value_name записывает пустую строку вместо текста



annas2001
06.01.2020, 17:04
Сама проблема в заголовке. Например, мне нужен пароль из базы данных, и чтобы его получить, я ввожу это:
cache_get_value_name(0, "pass", account[playerid][pass]);
Однако я получаю пустую строку. Логов никаких почему-то нет. Почему так происходит и как это можно исправить? Так происходит совершенно со всеми данными, которые я пытаюсь извлечь.

Pa4enka
06.01.2020, 17:10
Значит проблема в запросе. Больше кода надо.

annas2001
06.01.2020, 17:23
Значит проблема в запросе. Больше кода надо.

public OnPlayerConnect(playerid)
{
TextDrawShowForPlayer(playerid, logo0);
TextDrawShowForPlayer(playerid, logo1);
TextDrawShowForPlayer(playerid, logo2);
GetPlayerName(playerid, account[playerid][name], MAX_PLAYER_NAME);
new query[50+MAX_PLAYER_NAME];
format(query, sizeof(query), "SELECT * FROM `accounts` WHERE `name` = '%s'", account[playerid][name]);
mysql_tquery(c_handle, query, "FindPlayerInTable", "i", playerid);
return 1;
}
public FindPlayerInTable(playerid)
{
new rows;
cache_get_row_count(rows);
if(!rows)
{
// ...
}
else
{
LoadAuth(playerid);
new account_name[MAX_PLAYER_NAME+6];
format(account_name, sizeof(account_name), "Name: %s", account[playerid][name]);
PlayerTextDrawSetString(playerid, auth6[playerid], account_name);
PlayerTextDrawShow(playerid, auth0[playerid]);
PlayerTextDrawShow(playerid, auth1[playerid]);
PlayerTextDrawShow(playerid, auth2[playerid]);
PlayerTextDrawShow(playerid, auth3[playerid]);
PlayerTextDrawShow(playerid, auth4[playerid]);
PlayerTextDrawShow(playerid, auth5[playerid]);
PlayerTextDrawShow(playerid, auth6[playerid]);
PlayerTextDrawShow(playerid, auth7[playerid]);
PlayerTextDrawShow(playerid, auth9[playerid]);
PlayerTextDrawShow(playerid, auth11[playerid]);
PlayerTextDrawShow(playerid, auth13[playerid]);
SelectTextDraw(playerid, 0x609ccaaa);
cache_get_value_name(0, "pass", account[playerid][pass]);
cache_get_value_name_int(0, "id", account[playerid][id]);
}
}

Меня больше всего интересует то, почему не выдает ошибок в логах. Если бы там хоть что-то писало, можно было бы сделать хоть какие-то выводы.

DeimoS
06.01.2020, 17:26
Сама проблема в заголовке. Например, мне нужен пароль из базы данных, и чтобы его получить, я ввожу это:
cache_get_value_name(0, "pass", account[playerid][pass]);
Однако я получаю пустую строку. Логов никаких почему-то нет. Почему так происходит и как это можно исправить? Так происходит совершенно со всеми данными, которые я пытаюсь извлечь.

cache_get_value_name(0, "pass", account[playerid][pass], /*размер массива*/);

В текущем твоём варианте вместо третьего аргумента автоматически вызывается "sizeof". Но sizeof не сможет определить размер отдельного члена перечисления и поэтому вернёт 0. Как итог - функция cache_get_value_name не сможет записать в массив строку длиннее 0 символов =)

annas2001
06.01.2020, 17:28
cache_get_value_name(0, "pass", account[playerid][pass], /*размер массива*/);

В текущем твоём варианте вместо третьего аргумента автоматически вызывается "sizeof". Но sizeof не сможет определить размер отдельного члена перечисления и поэтому вернёт 0. Как итог - функция cache_get_value_name не сможет записать в массив строку длиннее 0 символов =)

Спасибо)