Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 12

Тема: Ошибки при работе с БД MySQL.

  1. #1
    Пользователь
    Регистрация
    25.05.2014
    Сообщений
    1
    Репутация: 1

    Звание: пока не определено

    Ошибки при работе с БД MySQL.

    [14:59:38] [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 ' `Score` = '0', `AdminLvl` = '3'' at line 1
    [14:59:38] [ERROR] "mysql_close" - invalid connection handle (ID = 1)
    [14:59:50] [WARNING] CMySQLHandle::Create - connection already exists
    [14:59:50] [WARNING] CMySQLHandle::Create - connection already exists
    [14:59:50] [ERROR] "cache_get_row_count" - invalid connection handle (ID = 1)
    [14:59:50] [ERROR] "cache_get_row_count" - invalid connection handle (ID = 1)
    [15:00:29] [ERROR] "mysql_escape_string" - invalid connection handle (ID = 1)
    [15:00:29] [ERROR] "mysql_escape_string" - invalid connection handle (ID = 1)
    [15:00:29] [ERROR] "cache_get_row_count" - invalid connection handle (ID = 1)
    [15:01:18] [ERROR] "mysql_escape_string" - invalid connection handle (ID = 1)
    [15:01:18] [ERROR] "mysql_escape_string" - invalid connection handle (ID = 1)

    Вот такие вот ошибочки выдаёт mysql_log.

    Всё, что связано с аккаунтом в гейммоде:

    stock CreateAccount(playerid, password[]) {
    new
    query[128], // Для запроса.
    sqlname[MAX_PLAYER_NAME],
    sqlpassword[32];
    mysql_real_escape_string(pInfo[playerid][aName], sqlname); // Защитит от sql inject
    mysql_real_escape_string(password, sqlpassword); // Защитит от sql inject
    format(query, sizeof(query), "INSERT INTO `Accounts` (`Name`, `Password`) VALUE ('%s', '%s')", sqlname, sqlpassword); // Добавляем в таблицу запись.
    // INSERT - добавление записи в таблицу, 1. () - поля. 2. VALUE - значения этих полей.
    mysql_query(connectionHandl, query); // Отправляем запрос.
    GetAccountID(playerid); // Узнаём ИД аккаунта, будет использоваться для сохранения и прочих операций.
    strmid(pInfo[playerid][aPassword], password, 0, 64, 255); // Внедряем в массив аккаунта введенный игроком пароль.
    pInfo[playerid][aLogged] = true; // Мы авторизованы.
    return 1;
    }
    stock LoadAccount(playerid, password[]) {
    new
    query[128],
    sqlpass[32],
    result[5+24+64],
    dialog[128];
    mysql_real_escape_string(password, sqlpass); // Защита от SQL Inject, шифрует кодировку.
    format(query, sizeof(query), "SELECT * FROM `Accounts` WHERE `Password` = '%s' AND `ID` = '%i'", sqlpass, pInfo[playerid][aID]);
    // SELECT * - выбрать, FROM - с таблицы, WHERE - где, пароль равен введенному паролю и ID равен иду ника человека.
    mysql_query(connectionHandl, query); // Отправляем запрос.
    mysql_store_result(); // Смотрим записи, которые мы выбрали запросом выше.
    if(mysql_num_rows() == 1) { // Если выбрало только 1 аккаунт с таким паролем и ИД - успех, пароль введен верно, загружаем данные в массив.
    mysql_fetch_row_format(result, "|"); // split, данные в результате записываются типо "1|Snoowker|parol"
    sscanf(result, "p<|>is[24]s[32]", // i - ид (int), s[размер] - string, ник и пароль.
    pInfo[playerid][aID],
    pInfo[playerid][aName],
    pInfo[playerid][aPassword]);
    pInfo[playerid][aLogged] = true;
    mysql_free_result(); // Очищаем память.
    return 1;
    }
    else { // Мы ввели неверный пароль.
    if(pInfo[playerid][aWrongPassword] == 4) {
    SendClientMessage(playerid, COLOR_LIGHTRED, "Вы 3 раза ввели неверный пароль и были отключены от сервера.");
    Kick(playerid);
    return 1;
    }
    format(dialog, sizeof(dialog),
    "Вы ввели неверный пароль.\n\
    У Вас осталось %i/3 попыток ввода.", 3 - pInfo[playerid][aWrongPassword]);
    ShowPlayerDialog(playerid, DIALOG_WRONGPAS, DIALOG_STYLE_MSGBOX, "Ошибка.", dialog, "Повтор", "Отмена");
    }
    return 1;
    }
    stock GetAccountID(playerid) {
    new
    query[128];
    format(query, sizeof(query),"SELECT `ID` FROM `Accounts` WHERE `Name` = '%s'", pInfo[playerid][aName]);
    // Выбираем ID, с таблицы Accounts, где Ник равен нику игрока.
    mysql_query(connectionHandl,query); // Отправляем запрос.
    mysql_store_result(); // Видим
    if(mysql_num_rows() == 1) { // Если у нас в результате выбрало 1 запись, т.е. аккаунт игрока.
    pInfo[playerid][aID] = cache_get_row_int(0, 0); // ИД игрока равен номеру записи.
    mysql_free_result(); // Очищаем память.
    return pInfo[playerid][aID]; // Возвращаем ИД игрока.
    }
    return 0;
    }

    stock SaveAccount(playerid) { // Сохранение аккаунта.
    if(pInfo[playerid][aLogged] == true) { // Проверка, если аккаунт авторизован.
    new
    query[186],
    sqlname[MAX_PLAYER_NAME],
    sqlpass[64];
    mysql_real_escape_string(pInfo[playerid][aName], sqlname);
    mysql_real_escape_string(pInfo[playerid][aPassword], sqlpass);
    format(query, sizeof(query), "UPDATE `Accounts` SET `Name` = '%s', `Password` = '%s' WHERE `ID` = '%i', `Score` = '%d', `AdminLvl` = '%d'", sqlname, sqlpass, pInfo[playerid][aID], GetPlayerScore(playerid), pInfo[playerid][pAdmin]);
    mysql_query(connectionHandl, query); // Отправляем запрос
    }
    return 1;
    }

    ПОМОГИТЕ ПЛИЗ!!!

  2. #2
    Активный пользователь Аватар для Vladimir_Prohorov
    Регистрация
    19.05.2013
    Возраст
    28
    Сообщений
    323
    Репутация: 38

    Звание: на пути к лучшему

    Re: Ошибки при работе с БД MySQL.

    Код в [php] [php]
    Жду ваши отзывы обо мне: Click!

  3. #3
    Пользователь
    Регистрация
    25.05.2014
    Сообщений
    1
    Репутация: 1

    Звание: пока не определено

    Re: Ошибки при работе с БД MySQL.

    Цитата Сообщение от Vladimir_Prohorov Посмотреть сообщение
    Код в [php] [php]
    Таблицу что ли с БД показать?

  4. #4
    Пользователь Аватар для ASAF
    Регистрация
    10.06.2014
    Возраст
    19
    Сообщений
    0
    Репутация: 5

    Звание: пока не определено

    Re: Ошибки при работе с БД MySQL.

    Зачем MySQL? На SQLite переходи, там проще)

  5. #5
    Активный пользователь Аватар для Vladimir_Prohorov
    Регистрация
    19.05.2013
    Возраст
    28
    Сообщений
    323
    Репутация: 38

    Звание: на пути к лучшему

    Re: Ошибки при работе с БД MySQL.

    Цитата Сообщение от VirvolF Посмотреть сообщение
    Зачем MySQL? На SQLite переходи, там проще)
    SQLite говно медлитеное, помню тема в этом разделе была. Даже ты вроде автор, или нет, я хз.
    http://pawno.su/showthread.php?t=103...ghlight=sqlite
    Жду ваши отзывы обо мне: Click!

  6. #6
    Активный пользователь Аватар для Vladimir_Prohorov
    Регистрация
    19.05.2013
    Возраст
    28
    Сообщений
    323
    Репутация: 38

    Звание: на пути к лучшему

    Re: Ошибки при работе с БД MySQL.

    ТС, в таблицу Score и AdminLvl добавил?
    Жду ваши отзывы обо мне: Click!

  7. #7
    Пользователь
    Регистрация
    25.05.2014
    Сообщений
    1
    Репутация: 1

    Звание: пока не определено

    Re: Ошибки при работе с БД MySQL.

    Цитата Сообщение от Vladimir_Prohorov Посмотреть сообщение
    ТС, в таблицу Score и AdminLvl добавил?
    Ясное дело. Не сохраняет даже имя и пароль. Каждый раз всё заново приходится делать.

  8. #8
    Активный пользователь Аватар для Vladimir_Prohorov
    Регистрация
    19.05.2013
    Возраст
    28
    Сообщений
    323
    Репутация: 38

    Звание: на пути к лучшему

    Re: Ошибки при работе с БД MySQL.

    Цитата Сообщение от AleksoidZ Посмотреть сообщение
    Ясное дело. Не сохраняет даже имя и пароль. Каждый раз всё заново приходится делать.
    PHP код:
    public OnQueryError(errorid,error[],callback[],query[],connectionHandle)
    {
        
    printf("%i,%s,%s,%s,%i",errorid,error,callback,query,connectionHandle);
        return 
    true;

    Вставь в конец мода >> скомпилируй >> перезапусти сервер >> сохрани аккаунт >> скинь логи из server.log
    Жду ваши отзывы обо мне: Click!

  9. #9
    Пользователь Аватар для ASAF
    Регистрация
    10.06.2014
    Возраст
    19
    Сообщений
    0
    Репутация: 5

    Звание: пока не определено

    Re: Ошибки при работе с БД MySQL.

    Цитата Сообщение от Vladimir_Prohorov Посмотреть сообщение
    SQLite говно медлитеное, помню тема в этом разделе была. Даже ты вроде автор, или нет, я хз.
    http://pawno.su/showthread.php?t=103...ghlight=sqlite
    Ну да, помню, я автор темы.
    Но так нужно научиться нормально распределять во времени все обращения к БД... Я понял свою тогдашнюю ошибку. Конечно, обновление на SQLite дольше идет потому, что pawn создает запрос и записывает сам всю инфу в БД, обновляется она напрямую. А на MySQL pawn лишь отправляет и принимает запросы, но не участвует в изменении, перезаписи самой БД. Нагрузка идет на сервер MySQL, а не на игровой сервер.

  10. #10
    Активный пользователь Аватар для Vladimir_Prohorov
    Регистрация
    19.05.2013
    Возраст
    28
    Сообщений
    323
    Репутация: 38

    Звание: на пути к лучшему

    Re: Ошибки при работе с БД MySQL.

    Ну, а чем SQLite то лучше? Все, что ты щас написал идет в пользу MySQL
    Жду ваши отзывы обо мне: Click!

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. [Вопрос] MysQl не пойму ошибки в логе.
    от Mr.Proper в разделе Вопросы по скриптингу
    Ответов: 10
    Последнее сообщение: 12.10.2013, 14:47
  2. Ошибки с MySQL при запуске игрового мода
    от #BOG в разделе Вопросы по скриптингу
    Ответов: 2
    Последнее сообщение: 21.09.2013, 10:01
  3. Ошибки с MySQL при запуске мода
    от Артём Синёв в разделе Вопросы по скриптингу
    Ответов: 6
    Последнее сообщение: 17.07.2013, 12:52
  4. Вопрос по работе античитов
    от Riwa в разделе Вопросы по скриптингу
    Ответов: 3
    Последнее сообщение: 10.05.2013, 15:45
  5. Перебои в работе форума.
    от Alex_Effect в разделе Другое
    Ответов: 2
    Последнее сообщение: 15.04.2013, 13:29

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •