PDA

Просмотр полной версии : [Вопрос] Ошибка в mysql_log при заходе на сервер. #2



Rachade
05.08.2014, 13:30
Здравствуйте. Извините, что создаю новую тему, но ошибку я исправить ни как не могу.
Сама ошибка возникает в mysql_log при заходе на сервер:
[ERROR] mysql_escape_string - destination size is too small (must be at least as big as source)
Когда я создал 1 тему, проблема была в том, что я не правильно обозначил никнейм игрока в define. После чего ошибка исчезла. Сейчас она стала снова появляться, и я не понимаю что не так в этом коде:

public OnPlayerConnect(playerid)
{
new strcon[128];
GetPlayerName(playerid, uInfo[playerid][uName], MAX_PLAYER_NAME);
mysql_real_escape_string(uInfo[playerid][uName], uInfo[playerid][uName]);
format(strcon, sizeof(strcon), "SELECT `uPerson` FROM `accounts` WHERE `uPerson` = '%s'", uNick(playerid));
mysql_function_query(connbase, strcon, true, "OnPlayerRegCheck", "d", playerid);
return true;
}
Сам define:

#define uNick(%0) uInfo[%0][uName]

Osetin
05.08.2014, 13:58
Используйте mysql_format (http://wiki.sa-mp.com/wiki/MySQL/R33#mysql_format) или просто измените размер mysql_escape_string.

Rachade
05.08.2014, 14:03
Используйте mysql_format (http://wiki.sa-mp.com/wiki/MySQL/R33#mysql_format) или просто измените размер mysql_escape_string.

//mysql_real_escape_string(uInfo[playerid][uName], uInfo[playerid][uName]);
mysql_format(connbase, strcon, sizeof(strcon), "SELECT `uPerson` FROM `accounts` WHERE `uPerson` = '%e'", uNick(playerid));
Сделал вот так. Ошибка пропала, но позиция камеры перестала работать. И игрок спавнится только через кнопку SPAWN (после авторизации). А в чём разница между mysql_escape_string и mysql_real_escape_string, и как у этой функции изменить размер?

Rachade
05.08.2014, 18:43
new strcon[128];
GetPlayerName(playerid, uInfo[playerid][uName], MAX_PLAYER_NAME);
format(strcon, sizeof(strcon), "SELECT `uPerson` FROM `accounts` WHERE `uPerson` = '%s'", uNick(playerid));
mysql_function_query(connbase, strcon, true, "OnPlayerRegCheck", "d", playerid);
Я решил немного поэкспериментировать, удалил вообще mysql_real_escape_string, а формат оставил обычным.
И всё работает :don-t_mention: Камера при входе стоит там, где я назначил, и после авторизации не нужно нажимать кнопку SPAWN.

Osetin
05.08.2014, 19:11
new strcon[128];
GetPlayerName(playerid, uInfo[playerid][uName], MAX_PLAYER_NAME);
format(strcon, sizeof(strcon), "SELECT `uPerson` FROM `accounts` WHERE `uPerson` = '%s'", uNick(playerid));
mysql_function_query(connbase, strcon, true, "OnPlayerRegCheck", "d", playerid);
Я решил немного поэкспериментировать, удалил вообще mysql_real_escape_string, а формат оставил обычным.
И всё работает :don-t_mention: Камера при входе стоит там, где я назначил, и после авторизации не нужно нажимать кнопку SPAWN.

А кто вам сказал вообще ее добавлять?

Rachade
05.08.2014, 21:12
А кто вам сказал вообще ее добавлять?

Вы :sarcastic:
http://pro-pawn.ru/showthread.php?4725-Пишем-мод-с-нуля-%28MySQL-R7-0-3x%29

- - - Добавлено - - -

Я только учусь работать в MySQL.

В public OnPlayerConnect(playerid):

new str[128];
mysql_real_escape_string(Name(playerid), Name(playerid));
format(str, sizeof(str),"SELECT `Name` FROM `Accounts` WHERE `Name` = '%s'", Name(playerid));
mysql_function_query(connectionHandle, str, true, "OnPlayerRegCheck","d", playerid);