[SourcePawn] Урок 13 - Работа с базами данных (MySQL, SQLite)

Miroha

Участник
Сообщения
1,124
Реакции
134
@Miroha, на веб хостингах от хостинга зависит, и то много НО. Тот же Бегет не размещает PMA на всех доменах пользователя, что усложняет (но не делает невозможным) вход в базу. Там у них отдельный домен под каждый выделенный сервер с клиентами.
А кто нибудь сможет мне помочь сделать защиту на beget?
 

Miroha

Участник
Сообщения
1,124
Реакции
134
Ну на Beget есть защита от других людей? Как я ранее говорил допустим я случайно спалил им логин и пароль от базы данной и есть ли защита что бы они знали данные но не могли войти?
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
@Miroha, я Вам вроде не по китайски написал:
Тот же Бегет не размещает PMA на всех доменах пользователя, что усложняет (но не делает невозможным) вход в базу. Там у них отдельный домен под каждый выделенный сервер с клиентами.
То есть Вам нужно не тупо логин-пароль засветить, а ещё и имя сервера, где располагается Ваша база, чтобы кто-то смог зайти.

И ничего с этим не сделать, потому что PMA - это дырка в безопасности. Его нужно либо не использовать совсем (что невозможно в рамках веб-хоста), либо прятать под пароль дополнительно (так же невозможно в рамках веб-хоста).
 

Miroha

Участник
Сообщения
1,124
Реакции
134
@Miroha, я Вам вроде не по китайски написал:

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

И ничего с этим не сделать, потому что PMA - это дырка в безопасности. Его нужно либо не использовать совсем (что невозможно в рамках веб-хоста), либо прятать под пароль дополнительно (так же невозможно в рамках веб-хоста).
Просто, у меня человек был который помогал мне очень давно прям очень давно с веб частью сервера он знал типа и логин и пароль и вот мне сейчас нужно от него защитить все базы данных, но не знаю как сделать(
 

echocage

Участник
Сообщения
81
Реакции
11
Подскажите пожалуйста, насколько нужно и возможно закрывать подключение после получения ответа на запрос?
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
Подскажите пожалуйста, насколько нужно и возможно закрывать подключение после получения ответа на запрос?
Зачем его закрывать, когда ответ получен? Разве только, если не используешь больше
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
А. Теперь понял, плохо знаком со спецификой sql
Обрабатываешь результаты через fetch-методы и свойства в переменные и закрываешь, если не нужно подключение. Возможно я не прав
 
Последнее редактирование:

Phenom

Джентльмен этиловый
Сообщения
187
Реакции
94
Назрел такой вопрос. Хочу воспользоваться Хранимой Процедурой в MySQL, возможно ли её как-то вызвать? Пробовал через натив Query, но не ответа ни привета. Был бы очень благодарен если приведёте пример.
 

Ice_Sochi

Участник
Сообщения
709
Реакции
413
Заметил и приятно удивился, что можно обновлять, то есть возвращать к началу набор результатов запроса, используя hResults.Rewind();
 

Ice_Sochi

Участник
Сообщения
709
Реакции
413
Провозился безрезультатно с FetchMoreResults (который SQL_FetchMoreResults), в итоге сделал всё без этого
Вдруг кто столкнется с тем же, чтоб не тратить время
Обработка результатов транзакции:
Action testbasecom(int iClient, int args)
{
    char sBuffer[128];
    Transaction hTxn = new Transaction();
    
    FormatEx(sBuffer, sizeof(sBuffer), "SELECT `test_number1` FROM `test_table1`;");
    hTxn.AddQuery(sBuffer);
    FormatEx(sBuffer, sizeof(sBuffer), "SELECT `test_number2` FROM `test_table2`;");
    hTxn.AddQuery(sBuffer);
    FormatEx(sBuffer, sizeof(sBuffer), "SELECT `test_number3` FROM `test_table3`;");
    hTxn.AddQuery(sBuffer);
    
    g_hDatabase.Execute(hTxn, SQL_TxnCallback_Success, SQL_TxnCallback_Failure);
    
    return Plugin_Handled;
}

public void SQL_TxnCallback_Success(Database hDatabase, any Data, int iNumQueries, DBResultSet[] hResults, any[] QueryData)
{
    for (int i = 0; i < iNumQueries; i++) //iNumQueries - кол-во изначальных запросов в БД
    {
        if(hResults[i].FetchRow())
        {
            PrintToServer("======================");
            
            hResults[i].Rewind();
            
            while(hResults[i].FetchRow())
            {
                PrintToServer("Num (test_table%i): %i", i + 1, hResults[i].FetchInt(0));
            }
        }
    }
}

public void SQL_TxnCallback_Failure(Database hDatabase, any Data, int iNumQueries, const char[] szError, int iFailIndex, any[] QueryData)
{
    LogError("SQL_TxnCallback_Failure: %s", szError);
}

1716500946873.png

в test_table2 нет никаких записей, если что
 

rejchev

менеджер клоунов
Сообщения
1,669
Реакции
1,291
Провозился безрезультатно с FetchMoreResults (который SQL_FetchMoreResults), в итоге сделал всё без этого
А чего с ним возиться, в доке же все написано.

У вас три запроса выборки и три результирующего набора данных.

Функция же нужна в случае получения множественного результирующего набора с одного запроса (например: функция, которая в теле содержит запросы выборки)
 

Ice_Sochi

Участник
Сообщения
709
Реакции
413
Функция же нужна в случае получения множественного результирующего набора с одного запроса (например: функция, которая в теле содержит запросы выборки)
Есть лайтовый пример такого запроса?
 

rejchev

менеджер клоунов
Сообщения
1,669
Реакции
1,291
Сверху Снизу