PDA

Просмотр полной версии : [Вопрос] Не работает сохранение аккаунта!



HarrWe
09.06.2016, 12:58
Hi, сёдня начал писать систему фракций, и понял что у меня не работает сохранение аккаунтов.
Вот сток сохранения, причём сохраняется только pMemeber, остальные нет.

stock SaveData(playerid)
{
new src[1000],query[1400];
format(query,sizeof(query),"UPDATE `acc` SET");
format(src, sizeof(src), "Member = '%d'", Player[playerid][pMember]); strcat(query, src, sizeof(query));
printf("Фракция: %d", Player[playerid][pMember]);
format(src, sizeof(src), "Rank = '%d'", Player[playerid][pRank]); strcat(query, src, sizeof(query));
printf("Ранг: %d",Player[playerid][pRank]);
format(src, sizeof(src), "Model = '%d'", Player[playerid][pModel]); strcat(query, src, sizeof(query));
printf("Скин фракции: %d",Player[playerid][pModel]);
format(src,sizeof(src)," WHERE Name = '%s'",Player[playerid][pName]); strcat(query, src, sizeof(query));
mysql_function_query(ConnectMySQL, query, false, "", "");
return true;
}
Я сделал для проверки вывод данных в консоль, там всё ок

[11:53:50] Фракция: 1
[11:53:50] Ранг: 10
[11:53:50] Скин фракции: 283
И ещё вылазит MySQL лог

[11:53:50] [ERROR] CMySQLQuery::Execute[] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= '1'Rank = '10'Model = '283' WHERE Name = 'Hary_Wester'' at line 1

#Johnson
09.06.2016, 13:10
Держи:

stock SaveData(playerid)
{
new src[1000],query[1400];
format(query,sizeof(query),"UPDATE `acc` SET");
format(src, sizeof(src), "Member = '%d',", Player[playerid][pMember]); strcat(query, src, sizeof(query));
printf("Фракция: %d", Player[playerid][pMember]);
format(src, sizeof(src), "Rank = '%d',", Player[playerid][pRank]); strcat(query, src, sizeof(query));
printf("Ранг: %d",Player[playerid][pRank]);
format(src, sizeof(src), "Model = '%d',", Player[playerid][pModel]); strcat(query, src, sizeof(query));
printf("Скин фракции: %d",Player[playerid][pModel]);
format(src,sizeof(src)," WHERE Name = '%s'",Player[playerid][pName]); strcat(query, src, sizeof(query));
mysql_function_query(ConnectMySQL, query, false, "", "");
return true;
}

HarrWe
09.06.2016, 13:15
Держи:

stock SaveData(playerid)
{
new src[1000],query[1400];
format(query,sizeof(query),"UPDATE `acc` SET");
format(src, sizeof(src), "Member = '%d',", Player[playerid][pMember]); strcat(query, src, sizeof(query));
printf("Фракция: %d", Player[playerid][pMember]);
format(src, sizeof(src), "Rank = '%d',", Player[playerid][pRank]); strcat(query, src, sizeof(query));
printf("Ранг: %d",Player[playerid][pRank]);
format(src, sizeof(src), "Model = '%d',", Player[playerid][pModel]); strcat(query, src, sizeof(query));
printf("Скин фракции: %d",Player[playerid][pModel]);
format(src,sizeof(src)," WHERE Name = '%s'",Player[playerid][pName]); strcat(query, src, sizeof(query));
mysql_function_query(ConnectMySQL, query, false, "", "");
return true;
}
Хм, не робит, снимал себя, ставил столбец Member не изменился, как был на 1 так и остался, а Rank и Model остались на 0

Redsan
09.06.2016, 13:23
Залогируйте весь запрос и отправьте его сюда.

HarrWe
09.06.2016, 13:26
Залогируйте весь запрос и отправьте его сюда.
Я так понял ты об этом?

CMD:makeleader(playerid, params[])
{
new string[128],member[30];
if(Player[playerid][pAdmin] < 6) return false;
if(sscanf(params, "ii", params[0], params[1])) return SCM(playerid,C_White, "[{009CFF}Подсказка{FFFFFF}] Используй: /makeleader [playerid] [ID фракции]");
if(!IsPlayerConnected(params[0])) return PlayerDontConnected;
if(params[1] < 0 || params [1] > 1) return false;
if(params[1] == 0)
{
Player[params[0]][pMember] = 0;
Player[params[0]][pRank] = 0;
SetPlayerArmour(params[0], 0.0);
ResetPlayerWeapons(params[0]);
SetPlayerSkin(params[0], Player[params[0]][pSkin]);
ClistColor(params[0]);
f("Администратор %s снял с вас лидерку");
SCM(params[0], C_White, string);
f("Администратор %s снял с лидерку с игрока %s [%d]", GN(playerid), GN(params[0]), params[0]);
SendMessageAdmins(C_Orang, string);
return true;
}
Player[params[0]][pMember] = params[1];
Player[params[0]][pRank] = 10;
ResetPlayerWeapons(params[0]);
SetPlayerSkin(params[0], Player[params[0]][pModel]);
switch(params[1])
{
case 1:
{
if(Player[params[0]][pSex] == 1) Player[params[0]][pModel] = 283;
if(Player[params[0]][pSex] == 2) Player[params[0]][pModel] = 306;
member = "Los Santos Police Departament";
}
}
SetPlayerSkin(params[0], Player[params[0]][pModel]);
ClistColor(params[0]);
f("Администратор %s назначил вас контролировать фракцию %s", GN(playerid), member);
SCM(playerid, C_White, string);
f("Администратор %s выдал лидерку игроку %s [%d]", GN(playerid), GN(params[0]), params[0]);
SendMessageAdmins(C_Orang, string);
return true;
}

Desulaid
09.06.2016, 13:57
stock SaveData(playerid)
{
new src[1000],query[1400];
format(query,sizeof(query),"UPDATE `acc` SET");
format(src, sizeof(src), "Member = '%d',", Player[playerid][pMember]); strcat(query, src, sizeof(query));
printf("Фракция: %d", Player[playerid][pMember]);
format(src, sizeof(src), "Rank = '%d',", Player[playerid][pRank]); strcat(query, src, sizeof(query));
printf("Ранг: %d",Player[playerid][pRank]);
format(src, sizeof(src), "Model = '%d'", Player[playerid][pModel]); strcat(query, src, sizeof(query));
printf("Скин фракции: %d",Player[playerid][pModel]);
format(src,sizeof(src)," WHERE Name = '%s'",Player[playerid][pName]); strcat(query, src, sizeof(query));
mysql_function_query(ConnectMySQL, query, false, "", "");
return true;
}

Запятые не расставил. А перед WHERE ее не надо. Но тут стоил сделать одно форматирование. Например, так.


stock SaveData(playerid)
{
static const fmt_str[] = "UPDATE `acc` SET Member = '%d', Rank = '%d', Model = '%d' WHERE Name = '%s'";
new str[sizeof(fmt_str) - 2*4 + 2 +2 + 3 + MAX_PLAYER_NAME];
format(str, sizeof(str), fmt_str, Player[playerid][pMember], Player[playerid][pRank], Player[playerid][pModel], Player[playerid][pName]);
mysql_function_query(ConnectMySQL, query, false, "", "");
}

HarrWe
09.06.2016, 14:09
stock SaveData(playerid)
{
new src[1000],query[1400];
format(query,sizeof(query),"UPDATE `acc` SET");
format(src, sizeof(src), "Member = '%d',", Player[playerid][pMember]); strcat(query, src, sizeof(query));
printf("Фракция: %d", Player[playerid][pMember]);
format(src, sizeof(src), "Rank = '%d',", Player[playerid][pRank]); strcat(query, src, sizeof(query));
printf("Ранг: %d",Player[playerid][pRank]);
format(src, sizeof(src), "Model = '%d'", Player[playerid][pModel]); strcat(query, src, sizeof(query));
printf("Скин фракции: %d",Player[playerid][pModel]);
format(src,sizeof(src)," WHERE Name = '%s'",Player[playerid][pName]); strcat(query, src, sizeof(query));
mysql_function_query(ConnectMySQL, query, false, "", "");
return true;
}

Запятые не расставил. А перед WHERE ее не надо. Но тут стоил сделать одно форматирование. Например, так.


stock SaveData(playerid)
{
static const fmt_str[] = "UPDATE `acc` SET Member = '%d', Rank = '%d', Model = '%d' WHERE Name = '%s'";
new str[sizeof(fmt_str) - 2*4 + 2 +2 + 3 + MAX_PLAYER_NAME];
format(str, sizeof(str), fmt_str, Player[playerid][pMember], Player[playerid][pRank], Player[playerid][pModel], Player[playerid][pName]);
mysql_function_query(ConnectMySQL, query, false, "", "");
}

Всё равно не сохранило, по 0 в базе

BadPawn
09.06.2016, 14:16
stock SaveData(playerid)
{
new src[1000],query[1400];
format(query,sizeof(query),"UPDATE `acc` SET");
format(src, sizeof(src), "`Member` = '%d',", Player[playerid][pMember]); strcat(query, src, sizeof(query));
printf("Фракция: %d", Player[playerid][pMember]);
format(src, sizeof(src), "`Rank` = '%d',", Player[playerid][pRank]); strcat(query, src, sizeof(query));
printf("Ранг: %d",Player[playerid][pRank]);
format(src, sizeof(src), "`Model` = '%d'", Player[playerid][pModel]); strcat(query, src, sizeof(query));
printf("Скин фракции: %d",Player[playerid][pModel]);
format(src,sizeof(src)," WHERE `Name` = '%s'",Player[playerid][pName]); strcat(query, src, sizeof(query));
mysql_function_query(ConnectMySQL, query, false, "", "");
return true;
}

HarrWe
09.06.2016, 14:34
stock SaveData(playerid)
{
new src[1000],query[1400];
format(query,sizeof(query),"UPDATE `acc` SET");
format(src, sizeof(src), "`Member` = '%d',", Player[playerid][pMember]); strcat(query, src, sizeof(query));
printf("Фракция: %d", Player[playerid][pMember]);
format(src, sizeof(src), "`Rank` = '%d',", Player[playerid][pRank]); strcat(query, src, sizeof(query));
printf("Ранг: %d",Player[playerid][pRank]);
format(src, sizeof(src), "`Model` = '%d'", Player[playerid][pModel]); strcat(query, src, sizeof(query));
printf("Скин фракции: %d",Player[playerid][pModel]);
format(src,sizeof(src)," WHERE `Name` = '%s'",Player[playerid][pName]); strcat(query, src, sizeof(query));
mysql_function_query(ConnectMySQL, query, false, "", "");
return true;
}

Огромное спасибо)Ща пойду искать отличия от своего кода)

BadPawn
10.06.2016, 05:36
запрос твой: Member = '%d'
Не соблюден синтаксис запроса, поэтому mysql ругается и криво сохраняет.

запрос правильный: `Member` = '%d'