Вопросы

Пытаюсь подключить мод к БД. Ввёл все данные, но в консоле пишет, что подключение не удалось. Пробовал по разному вводить данные. Итог один - ошибка

Скриншот консоли: *Клик*

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

26 ответов на этот вопрос

  • 0

@Perfect231, выведите код ошибки подключения к базе данных в консоль. Если не знаете как, покажите код, в котором выводится сообщение о несостоявшемся подключения к базе данных.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@Cawfee *Клик* 

Оно?

Заметка от DEST , создано

3.2. Код необходимо брать в тег "Код", а код более 10 строк – еще и в "Спойлер". Как это сделать рассказано в разделе "FAQ".

Устное предупреждение.

Загружайте код не скриншотами, а через встроенные инструменты форума.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@Perfect231, да. Вот возвращаемое значение функции mysql_errno и выведите в консоль.

printf("MySQL connection errorid = %d", mysql_errno());

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@Cawfee эту строку надо вставить в мод и посмотреть что выводится в консоли?

просто если вставить в саму консоль, то она ничего не выдаёт

 

Отредактировано пользователем Perfect231

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
Спойлер

[22:00:26] g_total_traffic_lights: 1
[22:00:26] g_total_traffic_lights: 2
[22:00:26] g_total_traffic_lights: 3
[22:00:26] g_total_traffic_lights: 4
[22:00:26] g_total_traffic_lights: 5
[22:00:26] [TextDraw]: Все текстдравы созданы
[22:00:26] [Menu]: Все меню созданы
[22:00:26] [Vehicle]: Все транспортные средства созданы
[22:00:26] [TP]: Все входы/выходы созданы
[22:00:26] [ATM]: Все банкоматы созданы
[22:00:26] MySQL connection errorid = %d
[22:00:26] Number of vehicle models: 42

 

это выводится в консоль. скорее всего я что-то не так сделал

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

после повторного запуска вышло это

Спойлер

[22:48:25] g_total_traffic_lights: 1
[22:48:25] g_total_traffic_lights: 2
[22:48:25] g_total_traffic_lights: 3
[22:48:25] g_total_traffic_lights: 4
[22:48:25] g_total_traffic_lights: 5
[22:48:25] [TextDraw]: Все текстдравы созданы
[22:48:25] [Menu]: Все меню созданы
[22:48:25] [Vehicle]: Все транспортные средства созданы
[22:48:25] [TP]: Все входы/выходы созданы
[22:48:25] [ATM]: Все банкоматы созданы
[22:48:25] MySQL connection errorid = 1045
[22:48:25] Number of vehicle models: 42

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@keyl данные копировал с хостинга, проверил много раз, ошибки в вводе данных нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@Perfect231, попробуйте подключиться к базе данных вручную. Например, через SSH клиент или утилиты MySQL.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
Спойлер

SetServerConfiguration(bind[])
{
    if(!strcmp(bind, "127.0.0.1")) //Tavrida
    {
        SendRconCommand("hostname TAVRIDA ROLEPLAY");
        SetGameModeText("TAVRIDA CRMP");
        mysql = mysql_connect("""""""");
        return 1;
    }
    else //test
    {
        mysql = mysql_connect("""""""");

        SendRconCommand("hostname TAVRIDA RP");
        SetGameModeText("TAVRIDA RP");
    }
    return 1;
}

 

это код данных от бд. Если вдруг может тут дело. Данные убрал

Отредактировано пользователем Perfect231

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

решил вопрос добавлением сточки 

new dbHandle;

но при заходе на сервер ничего не выдаёт 
Скрин

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@Perfect231 попробуй убрать 

SetServerConfiguration(bind[])
а на его место вывести
    SendRconCommand("hostname TAVRIDA ROLEPLAY");
    SetGameModeText("TAVRIDA CRMP");
    mysql = mysql_connect("""""""");

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@Cawfee попробовал пошаманить с подключением. теперь всё загружает, но выдаёт это

Спойлер

[19:58:59] [debug] Run time error 4"Array index out of bounds"
[19:58:59] [debug]  Attempted to read/write array element at index 49 in array of size 49
[19:58:59] [debug] AMX backtrace:
[19:58:59] [debug] #0 00072500 in public LoadBusinesses () at C:\Users\banas\Desktop\PERFECT RP pc-mobile\gamemodes\new.pwn:12490
[19:58:59] [debug] #1 0003968in public n_veh_OnGameModeInit () at C:\Users\banas\Desktop\PERFECT RP pc-mobile\gamemodes\new.pwn:6726
[19:58:59] [debug] #2 00029df0 in public n_OnGameModeInit () at ../include/system/vehicle.pwn:444
[19:58:59] [debug] #3 0002929in public ac_OnGameModeInit () at ../include/system/pickup.pwn:133
[19:58:59] [debug] #4 00026a78 in public fc_OnGameModeInit () at ../include/anticheat.inc:2599
[19:58:59] [debug] #5 0000fda4 in public PawnCmd_OnGameModeInit () at ../include/foreach.inc:584
[19:58:59] [debug] #6 0000a468 in public SSCANF_OnGameModeInit () at ../include/Pawn.CMD.inc:125
[19:58:59] [debug] #7 00003bbc in public PawnRakNet_OnGameModeInit () at ../include/sscanf2.inc:205
[19:58:59] [debug] #8 000036cc in public OnGameModeInit () at ../include/pawnraknet.inc:1029

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@Perfect231, ну, написано же, что произошел выход за пределы массива: в массиве есть всего 49 ячеек (с индексами 0 ... 48), а вы пытаетесь что-то записать в ячейку с индексом 49, то есть фактически осуществляете попытку записи в чужую область памяти.

 

Можете поискать просто массив на 49 ячеек и посмотреть все выполняемые с ним действия в надежде прийти к успеху. Есть и другой вариант, более адекватный: подключить библиотеку crashdetect, которая, помимо всего прочего, подскажет вам, на какой строке искать проблему.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@Cawfee crashdetect подключён. в консоле пишутся номера строк, но там нет ничего такого

 

@Cawfee нашёл массив. изменил значение. теперь бд прогружается полностью. но на самом сервере что нельзя зайти из-за ошибки в системных настройках 

Скрин

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@Perfect231, ой, а он действительно подключен. Что-то я уже совсем -_-

 

В LoadBusinesses по идее должен быть этот массив. Пересматривайте получение информации о бизнесах из базы данных.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@Cawfee я нашёл его. убрал значение 49 и поставил 500. Там было максимальное кол-во бизнесов. теперь всё работает, но выдаёт на самом сервере сбой. скрин в сообщении выше

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@Perfect231, корректнее было бы добавить проверку: если количество бизнесов в базе данных больше максимально допустимого количества бизнесов (не знаю, как у вас называется константа, но, предположим, MAX_BUSINESS, тогда пропускать загрузку остальных бизнесов):

if (rows > MAX_BUSINESS) {
    printf("[x] Не удалось загрузить все бизнесы ввиду недостаточного размера массива. Загружено %d из %d бизнесов", MAX_BUSINESS, rows);
    rows = MAX_BUSINESS; // фактически загрузим лишь столько бизнесов, сколько влезет
}

for (new i = 0; i < rows; i++) {
    // загружаем
}

 

Касаемо второго вопроса, обычно такое можно увидеть, когда запрос к базе данных  на получение информации о существовании аккаунта не удался. Например по причине неправильного названия таблицы аккаунтов. Нужно смотреть логи MySQL.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@Cawfee 

Спойлер

public: CheckPlayerAccount(playerid)
{
    new is_account_exist;

    SendClientMessage(playerid, -1"Добро пожаловать на {FFCC00}"SERVER_NAME" RolePlay{ffffff}!");

    if(g_doubling[DOUBLING_DONATE_CONVERT]) SCM(playerid, COLOR_WHITE, "Сегодня действует акция: {00cc00}x2 Конвертация валюты");
    if(g_doubling[DOUBLING_EXP]) SCMF(playerid, COLOR_WHITE, "Сегодня действует акция: {00cc00}x%i EXP", g_doubling_exp);
    if(g_doubling[DOUBLING_WAGE]) SCM(playerid, COLOR_WHITE, "Сегодня действует акция: {00cc00}x2 ЗП");
    if(g_doubling[DOUBLING_DONATE_RUB]) SCM(playerid, COLOR_WHITE, "Сегодня действует акция: {00cc00}x2 Донат(/donate)");
    
    TogglePlayerSpectating(playerid, true);

    InterpolateCameraPos ( playerid, 1893.4406732095.18408217.1076561853.2032472095.02148417.31991980000 );
    InterpolateCameraLookAt ( playerid, 1888.4418942095.22802717.2076511848.2058102095.14404217.41991480000 );

    if ( !mysql_errno () )
    {
        foreach(new i:Player)
        {
            if ( i == playerid ) continue;
            if(!strcmp(GetPlayerNameEx(playerid), GetPlayerNameEx(i), true))
            {
                SCMF(playerid, -1"Игрок с вашим никнеймом %s уже играет под ID %d, используйте другое имя для входа.", GetPlayerNameEx(playerid), i);
                FixKick(playerid);
                return 1;
            }
        }
        
        if(IsPlayerFromThePhone(playerid))
        {
            new playermobile_name[24];

            if(strlen(GetPlayerNameEx(playerid)) > 18)
            {
                SCM(playerid, -1"Ваш никнейм содержит более 18 символов. Пожалуйста, используйте от 3 до 18 символов в нике.");
                FixKick(playerid);
                return 1;
            }

            format(playermobile_name, sizeof(playermobile_name), "%s_M", g_player[playerid][P_NAME]);
            SetPlayerName(playerid, playermobile_name);
        }
        
        is_account_exist = cache_num_rows();
        SetPlayerData ( playerid, P_ACCOUNT_STATE, is_account_exist + 1 );

        if ( is_account_exist )
        {
            cache_get_value_name_int ( 0"id", GetPlayerData ( playerid, P_ACCOUNT_ID ) );

            cache_get_value_name ( 0"password", g_player [ playerid ] [ P_PASSWORD ] );
            cache_get_value_name ( 0"last_ip", g_player [ playerid ] [ P_LAST_IP ] );

            cache_get_value_name_int ( 0"request_phone", GetPlayerData ( playerid, P_REQUEST_PHONE ) );
            cache_get_value_name_int ( 0"request_pin", GetPlayerData ( playerid, P_REQUEST_PIN ) );

            new subnet [ 2 ] [ 16 ];

            subnet [ 0 ] = GetSubNet ( g_player [ playerid ] [ P_IP ] );
            subnet [ 1 ] = GetSubNet ( g_player [ playerid ] [ P_LAST_IP ] );

            SetPlayerData ( playerid, P_AUTH_TIME, 0 );

            CreateLoginTD ( playerid );
        }
        else CreateRegForPlayer ( playerid );
    }
    else
    {
        ShowPlayerDialog
        (
        playerid, 0, DIALOG_STYLE_MSGBOX,
        "{FF9900}Критическая ошибка",
        "{FFFFFF}Невозможно подключиться к серверу из-за сбоя системных настроек\n"\
        "Если проблема не решится в течение нескольких минут обратитесь к администрации",
        "Выход"""
        );
        FixKick(playerid, "Ошибка соединения. Введите /q (/quit) чтобы выйти"3000);
    }

    return 1;

}

 

вот код где есть эта надпись

Отредактировано пользователем Perfect231

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@Perfect231, ну, да, какая-то ошибка, связанная с MySQL. Смотрите логи... Обычно файл mysql_log.txt. Если такового нет, включите ведение логов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@Cawfee надо просто в мод вставить это? если да, то куда

{ )()
{
 mysql_log(ALL); //logs everything (errors, warnings and debug messages)
    return  1
}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@Perfect231, куда-нибудь перед подключением к базе данных (чтобы в случае ошибок при подключении запись о самой ошибки также была занесена в файл логов).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@Cawfee я нашёл его. там жесть. Логи повторяются по миллиону раз. куда скинуть файл?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@Perfect231, удалите этот файл. Заново зайдите на сервер, получите так называемый вами сбой, после этого прикрепите файл сюда (лучше его содержимое в текстовом виде). Уточню, что удаление файла ни к чему плохому не приведет: он просто создастся заново, но там не будет повторяющихся "миллион раз" логов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@Cawfee всё равно миллион раз повторяются, если быть точнее, то: 65178 раз

вот это первая ошибка

[03/04/23 22:46:16] [plugins/mysql] error #1054 while executing query "UPDATE `accounts` SET `online` = 1001, `leader_access` = 0": Unknown column 'online' in 'field list' (C:\Users\banas\Desktop\PERFECT RP pc-mobile\gamemodes\new.pwn:6703 -> ../include/system/vehicle.pwn:444 -> ../include/system/pickup.pwn:133 -> ../include/anticheat.inc:2599 -> ../include/foreach.inc:584 -> ../include/Pawn.CMD.inc:125 -> ../include/sscanf2.inc:205 -> ../include/pawnraknet.inc:1028)

 

Отредактировано пользователем Perfect231

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • Sten Developer
      От Sten Developer
      Объясню всю ситуацию, пишу систему смерти игрока но она не работает. Решил по приколу написать туда обычный вывод текста SCM(playerid, COLOR_RED, "Вы умерли");
      Но однако после смерти текст не выводиться. Не работает абсолютно все. Кто знает как решить эту проблему?