Просмотр полной версии : [Вопрос] По поводу MySQL R7-2
Что не так в этом коде?
stock RegisterPlayer(playerid)
{
new query[170];
format(query, sizeof(query), "INSERT INTO `accounts` (`nickname`, `email`, `password`, `regdata`, `regip`, `age`, `sex`, `race`) VALUES ('%s','%e','%e','%s','%s','%d','%d','%d')", pData[playerid][pNickname],pData[playerid][pEmail] ,pData[playerid][pPassword], pData[playerid][pRegData], pData[playerid][pRegIP],pData[playerid][pAge], pData[playerid][pGender],pData[playerid][pRace]);
mysql_function_query(dbHandle, query, false, "", "");
}
Не регистрирует аккаунт. (Вообще не появляется новая строчка)
Вот mysql_log:
[23:47:43] Passing query INSERT INTO `accounts` (`nickname`, `email`, `password`, `regdata`, `regip`, `age`, `sex`, `race`) VALUES ('
[email protected]','e','e','
[email protected]','cn |
[23:47:43] CMySQLHandler::ProcessQueryThread() - Error will be triggered to OnQueryError()
[23:47:43] OnQueryError() - Called.
В format нет спецификатора %e. Используй %q или используй mysql_format
В format нет спецификатора %e. Используй %q или используй mysql_format
использовал mysql_format. При использовании спецификатора %e просто выключало сервер без ошибок в лог. Я сделал %s. Аккаунт сохранился, но появился такой артефакт: http://dl1.joxi.net/drive/2016/06/15/0004/1911/292727/27/6b415430a8.jpg
(Вводил пароль: 123456, e-mail:
[email protected].)
stock RegisterPlayer(playerid)
{
new query[170];
mysql_format(dbHandle,query, "INSERT INTO `accounts` (`nickname`, `email`, `password`, `regdata`, `regip`, `age`, `sex`, `race`) VALUES ('%s','%s','%s','%s','%s','%d','%d','%d')", pData[playerid][pNickname],pData[playerid][pEmail] ,pData[playerid][pPassword], pData[playerid][pRegData], pData[playerid][pRegIP],pData[playerid][pAge], pData[playerid][pGender],pData[playerid][pRace]);
mysql_function_query(dbHandle, query, false, "", "");
}
Я также вывел все эти переменные в printf. Они записываются нормально.
http://dl1.joxi.net/drive/2016/06/15/0004/1911/292727/27/2f484b2cd8.jpg
использовал mysql_format. При использовании спецификатора %e просто выключало сервер без ошибок в лог. Я сделал %s. Аккаунт сохранился, но появился такой артефакт: http://dl1.joxi.net/drive/2016/06/15/0004/1911/292727/27/6b415430a8.jpg
(Вводил пароль: 123456, e-mail:
[email protected].)
stock RegisterPlayer(playerid)
{
new query[170];
mysql_format(dbHandle,query, "INSERT INTO `accounts` (`nickname`, `email`, `password`, `regdata`, `regip`, `age`, `sex`, `race`) VALUES ('%s','%s','%s','%s','%s','%d','%d','%d')", pData[playerid][pNickname],pData[playerid][pEmail] ,pData[playerid][pPassword], pData[playerid][pRegData], pData[playerid][pRegIP],pData[playerid][pAge], pData[playerid][pGender],pData[playerid][pRace]);
mysql_function_query(dbHandle, query, false, "", "");
}
Я также вывел все эти переменные в printf. Они записываются нормально.
http://dl1.joxi.net/drive/2016/06/15/0004/1911/292727/27/2f484b2cd8.jpg
Разве емайл надо записывать не через strmid?
Разве емайл надо записывать не через strmid?
Я записывал через mysql_real_escape_string.
Судя по вики: http://wiki.sa-mp.com/wiki/MySQL/R33#mysql_format
Ты используешь функцию mysql_format неправильно. Нужно указать размер query.
mysql_format(dbHandle, query, sizeof(query), "INSERT INTO `accounts` (`nickname`, `email`, `password`, `regdata`, `regip`, `age`, `sex`, `race`) VALUES ('%s','%s','%s','%s','%s','%d','%d','%d')", pData[playerid][pNickname],pData[playerid][pEmail] ,pData[playerid][pPassword], pData[playerid][pRegData], pData[playerid][pRegIP],pData[playerid][pAge], pData[playerid][pGender],pData[playerid][pRace]);
Также выведи то, что сформировалось с помощью print:
print(query);
Судя по вики: http://wiki.sa-mp.com/wiki/MySQL/R33#mysql_format
Ты используешь функцию mysql_format неправильно. Нужно указать размер query.
mysql_format(dbHandle, query, sizeof(query), "INSERT INTO `accounts` (`nickname`, `email`, `password`, `regdata`, `regip`, `age`, `sex`, `race`) VALUES ('%s','%s','%s','%s','%s','%d','%d','%d')", pData[playerid][pNickname],pData[playerid][pEmail] ,pData[playerid][pPassword], pData[playerid][pRegData], pData[playerid][pRegIP],pData[playerid][pAge], pData[playerid][pGender],pData[playerid][pRace]);
Также выведи то, что сформировалось с помощью print:
print(query);
Хм, ошибка: error 035: argument type mismatch (argument 3)
Я использую MySQL R7-2, в том же вики написано так: http://wiki.sa-mp.com/wiki/MySQL#mysql_format
http://joxi.ru/Dr8KZEbHkbBRbA.jpg
Я использую MySQL R7-2,[/url]
Почему? Оно же такое старое...
http://joxi.ru/Dr8KZEbHkbBRbA.jpg
Очевидно, что данные в pData[playerid][pNickname] и в прочие строки записываются неправильно.
Решил вот таким способом, но этот код похож на костыль, можно его как-нибудь оптимизировать?
new query[201], pass[16], email[32],ip[16],data[16], name[MAX_PLAYER_NAME];
GetPVarString(playerid,"email",email,32);
GetPVarString(playerid,"pass",pass,16);
GetPVarString(playerid,"name",name,MAX_PLAYER_NAME);
format(data, sizeof(data), "%s", date("%dd.%mm.%yyyy", gettime()));
GetPlayerIp(playerid, ip, sizeof(ip));
format(query, sizeof(query), "INSERT INTO `accounts` (`nickname`, `password`, `regdata`, `regip`, `email`, `age`, `sex`, `race`) VALUES ('%s','%s','%s','%s','%s','%d','%d','%d')", name, pass, data, ip, email,pData[playerid][pAge], pData[playerid][pGender],pData[playerid][pRace]);
mysql_function_query(dbHandle, query, false, "", "");
- - - Добавлено - - -
Почему? Оно же такое старое...
Очевидно, что данные в pData[playerid][pNickname] и в прочие строки записываются неправильно.
Это мои первые опыты, я это для души делаю)
Покажи как ты пытаешься записать данные в pData[playerid][pNickname].
Покажи как ты пытаешься записать данные в pData[playerid][pNickname].
new temp[MAX_PLAYER_NAME];
GetPlayerName(playerid,temp,MAX_PLAYER_NAME);
SetPVarString(playerid,"name",temp);
Я уже решил проблему. Помог этот код:
new query[201], pass[16], email[32],ip[16],data[16], name[MAX_PLAYER_NAME];
GetPVarString(playerid,"email",email,32);
GetPVarString(playerid,"pass",pass,16);
GetPVarString(playerid,"name",name,MAX_PLAYER_NAME);
format(data, sizeof(data), "%s", date("%dd.%mm.%yyyy", gettime()));
GetPlayerIp(playerid, ip, sizeof(ip));
format(query, sizeof(query), "INSERT INTO `accounts` (`nickname`, `password`, `regdata`, `regip`, `email`, `age`, `sex`, `race`) VALUES ('%s','%s','%s','%s','%s','%d','%d','%d')", name, pass, data, ip, email,pData[playerid][pAge], pData[playerid][pGender],pData[playerid][pRace]);
mysql_function_query(dbHandle, query, false, "", "");
Но он похож на костыль, можно его как-нибудь оптимизировать?
Но он похож на костыль, можно его как-нибудь оптимизировать?
Зачем ты скопировал свой предыдущий пост? Я попросил показать то, как ты записываешь данные (или раньше записывал) в pData[playerid][pNickname].
Зачем ты скопировал свой предыдущий пост? Я попросил показать то, как ты записываешь данные (или раньше записывал) в pData[playerid][pNickname].
Я решил записывать не через pData[playerid][pNickname], а обойтись Pvar'ом. Этот вариант подошел, в базу все записалось отлично!
Я решил записывать не через pData[playerid][pNickname], а обойтись Pvar'ом. Этот вариант подошел, в базу все записалось отлично!
Но ты же сам считаешь, что это костыль. Но если тебе это подходит, то ладно, твоё дело.
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot