MySQL: Что то с сохранением аккаунтов в таблицу -
Mckenzy - 26.06.2012
Собственно такие дела. Что то с сохранением аккаунтов в таблицу. Ид начинается не с нуля, а либо с 1, или с 5, вообщем как вздумается. Так же, не записывает координаты, хотя если зайти на сервер не перезапуская его, то игрок появится где нужно. Пароль тоже сохраняет через раз, хотя при авторизации все номарльно (человек вводит свой пароль и его авторизует). Произошло все после того, как сделал сохранение позиций игрока при выходе. Ошибок и варнингов соответственно нет, код пересматривал 100 раз, что то убирал, редактировал, нихера. Вот лог из дебага:
PHP код:
[23:24:01] >> mysql_query( Connection handle: 1 )
[23:24:01] CMySQLHandler::Query(SELECT * FROM `players` WHERE `name` = 'Tester_Mckenzy' LIMIT 1) - Successfully executed.
[23:24:01] >> mysql_store_result( Connection handle: 1 )
[23:24:01] CMySQLHandler::StoreResult() - Result was stored.
[23:24:01] >> mysql_fetch_row_format( Connection handle: 1 )
[23:24:04] >> mysql_query( Connection handle: 1 )
[23:24:04] CMySQLHandler::Query(INSERT INTO `players` (`Name`,`Pass`) VALUES ('Tester_Mckenzy','123qwe')) - Successfully executed.
[23:24:05] >> mysql_query( Connection handle: 1 )
[23:24:05] CMySQLHandler::Query(UPDATE players SET Name = 'Tester_Mckenzy',Pass = '',Sex = 1,Money = 0,Reg = 0,PosX = 0.000000,PosY = 0.000000,PosZ = 0.000000WHERE ID=0) - Successfully executed.
[23:24:06] >> mysql_query( Connection handle: 1 )
[23:24:06] CMySQLHandler::Query(UPDATE players SET Name = 'Tester_Mckenzy',Pass = '',Sex = 1,Money = 0,Reg = 1,PosX = 0.000000,PosY = 0.000000,PosZ = 0.000000WHERE ID=0) - Successfully executed.
[23:24:19] >> mysql_query( Connection handle: 1 )
[23:24:19] CMySQLHandler::Query(UPDATE players SET Name = 'Tester_Mckenzy',Pass = '',Sex = 1,Money = 0,Reg = 1,PosX = 2778.801269,PosY = 1264.778930,PosZ = 10.750000WHERE ID=0) - Successfully executed.
[23:24:25] >> mysql_close( Connection handle: 1 )
[23:24:25] CMySQLHandler::~CMySQLHandler() - deconstructor called.
[23:24:25] CMySQLHandler::FreeResult() - Result was successfully free'd.
[23:24:25] CMySQLHandler::Disconnect() - Connection was closed.
Сток сейва:
PHP код:
stock SaveAccount(playerid)
{
GetPlayerPos(playerid, PlayerInfo[playerid][pPos][0], PlayerInfo[playerid][pPos][1], PlayerInfo[playerid][pPos][2]);
format(queryString, sizeof(queryString), "UPDATE players SET \
Name = '%s',\
Pass = '%s',\
Sex = %d,\
Money = %d,\
Reg = %d,\
PosX = %f,\
PosY = %f,\
PosZ = %f,\
WHERE ID=%d",
PlayerInfo[playerid][pName],
PlayerInfo[playerid][pPass],
PlayerInfo[playerid][pSex],
PlayerInfo[playerid][pMoney],
PlayerInfo[playerid][pReg],
PlayerInfo[playerid][pPos][0],
PlayerInfo[playerid][pPos][1],
PlayerInfo[playerid][pPos][2],
PlayerInfo[playerid][pID]);
mysql_query(queryString);
return 1;
}
Re: MySQL -
ZiGGi - 26.06.2012
Яж писал на прусе... Убери запятую.
Re: MySQL -
Stepashka - 26.06.2012
Ты делаешь выборку по нику, сохранять нужно тоже по нику (Зигги надо быть невнимательнее к таким мелочам

) поэтому у тебя поехали ИД.
Из логов мускула видно что пароль вообще отсутствует в запросе, а это говорит о том что
PlayerInfo[playerid][pPass] пуста. Отсюда резонный вопрос: ты дебаг делал?
PS хоть и на другом форуме ты утверждаешь что делал все возможное для исправления проблемы, я думаю дальше бесполезного просмотра лога дело не заходило. Потому что дебаг это первое что должен делать скриптер при не работающем коде.
Re: MySQL -
Stepashka - 26.06.2012
Кстати совет "убрать кавычки" абсолютно бесполезный, SQL синтаксис допускает кавычки у числовых значений, а в некоторых случаях даже рекомендует их наличие.
Так что я посоветую оставить запрос в первоначальном виде:
pawn Код:
format(queryString, sizeof(queryString),
"UPDATE players SET \
Name = '%s', \
Pass = '%s', \
Sex = '%d', \
Money = '%d', \
Reg = '%d', \
PosX = '%.3f', \
PosY = '%.3f', \
PosZ = '%.3f' \
WHERE Name='%s' \
LIMIT 1",
PlayerInfo[playerid][pName],
PlayerInfo[playerid][pPass],//тебе нужно только выяснить почему тут пусто
PlayerInfo[playerid][pSex],
PlayerInfo[playerid][pMoney],
PlayerInfo[playerid][pReg],
PlayerInfo[playerid][pPos][0],
PlayerInfo[playerid][pPos][1],
PlayerInfo[playerid][pPos][2],
PlayerInfo[playerid][pName]
);
Re: MySQL: Что то с сохранением аккаунтов в таблицу -
Stepashka - 26.06.2012
Quote:
Originally Posted by Mckenzy
Ид начинается не с нуля, а либо с 1, или с 5, вообщем как вздумается.
|
В MySQL
нет, ни когда не было, не может быть, и даже предположить нельзя наличие ID = 0.
Не как вздумается, а строго на один больше от предыдущего значения, даже если вы предыдущую запись удалили. Не пытайтесь этого менять или пытаться выстраивать записи по порядку!
Re: MySQL -
ZiGGi - 26.06.2012
Quote:
Originally Posted by Stepashka
Зигги надо быть невнимательнее к таким мелочам
|
Ну всё-равно запрос некорректен, в дебаг логе ваще "10.750000WHERE" и т.п..
Re: MySQL: Что то с сохранением аккаунтов в таблицу -
Mckenzy - 26.06.2012
Эм...а возможно ли решить проблему с пустой переменной пароля вот таким вот способом:
PlayerInfo[playerid][pPass] = inputtext;
И как решить проблему со слетом ИД?
Re: MySQL -
Mckenzy - 26.06.2012
(del)
Re: MySQL: Что то с сохранением аккаунтов в таблицу -
Stepashka - 27.06.2012
Quote:
Originally Posted by Mckenzy
Эм...а возможно ли решить проблему с пустой переменной пароля вот таким вот способом:
PlayerInfo[playerid][pPass] = inputtext;
|
нет.
strcat(PlayerInfo[playerid][pPass], inputtext)
Quote:
Originally Posted by Mckenzy
И как решить проблему со слетом ИД?
|
для начала нужно разобраться, а слетели ли они вообще, потом разобраться, а нужны ли тебе идишнки если ты все время работаешь с никами?!
Re: MySQL: Что то с сохранением аккаунтов в таблицу -
Mckenzy - 27.06.2012
Сейчас что то сделал, теперь такая херня: С регистрацией все нормально, все сохраняет (переменные, позицию игрока и т.д). Все видно в таблице. Если игрок перезаходит, то все, кроме позиций и ника с паролем слетает. Т.е значение переменных слетают. Хотя используется один и тот же сток.
Re: MySQL: Что то с сохранением аккаунтов в таблицу -
Mckenzy - 27.06.2012
Появявился вопрос, можно ли использовать функцию
mysql_real_escape_string(); следующим образом:
PHP код:
mysql_real_escape_string(PlayerInfo[playerid][pName], '%s');
Re: MySQL: Что то с сохранением аккаунтов в таблицу -
eakwarp - 27.06.2012
Quote:
Originally Posted by Mckenzy
Появявился вопрос, можно ли использовать функцию mysql_real_escape_string(); следующим образом:
PHP код:
mysql_real_escape_string(PlayerInfo[playerid][pName], '%s');
|
Учи матчасть. Боже, с такими "знаниями", и таким "желанием" читать документацию, лучше играть, и не тратить наше время попусту.
Re: MySQL: Что то с сохранением аккаунтов в таблицу -
A1taVista - 28.06.2012
Quote:
Originally Posted by Mckenzy
Сейчас что то сделал, теперь такая херня: С регистрацией все нормально, все сохраняет (переменные, позицию игрока и т.д). Все видно в таблице. Если игрок перезаходит, то все, кроме позиций и ника с паролем слетает. Т.е значение переменных слетают. Хотя используется один и тот же сток.
|
А знаешь, почему всё слетает? Ты сохраняешь в БД НУЛЕВЫЕ значения, если используешь один и тот же сток. Чтобы получить данные, используется запрос SELECT. Поищи в википедии, что это такое и с чем его едят.
И вообще, правильно говорят люди, прежде чем писать - разберись сам. Так ты ничего никогда не поймешь, если все всё за тебя делать будут.
Re: MySQL: Что то с сохранением аккаунтов в таблицу -
Mckenzy - 28.06.2012
Quote:
Originally Posted by A1taVista
А знаешь, почему всё слетает? Ты сохраняешь в БД НУЛЕВЫЕ значения, если используешь один и тот же сток. Чтобы получить данные, используется запрос SELECT. Поищи в википедии, что это такое и с чем его едят.
И вообще, правильно говорят люди, прежде чем писать - разберись сам. Так ты ничего никогда не поймешь, если все всё за тебя делать будут.
|
Селект я использую при загрузке аккаунта.
Re: MySQL: Что то с сохранением аккаунтов в таблицу -
A1taVista - 03.07.2012
А зачем ты аккаунт сохраняешь при заходе, судя по твоим словам?