sql_callback как правильно

Drop

Участник
Сообщения
41
Реакции
1
Не пойму, как правильно использовать sql callback. Связь с бд сделал таким образом:
PHP:
new Handle:g_SQL = INVALID_HANDLE, bool:MYSQL,conte;


public OnPluginStart(){
 new Handle:kv = CreateKeyValues("");
     KvSetString(kv, "driver", "mysql");
     KvSetString(kv, "host", "");
     KvSetString(kv, "database", "");
     KvSetString(kv, "user", "");
     KvSetString(kv, "pass", "");
     KvSetString(kv, "port", "3306");
   
     decl String:error[255];
     g_SQL = SQL_ConnectCustom(kv, error, 255, true); 
     CloseHandle(kv);
     
     new String:driver[15];
     SQL_ReadDriver(g_SQL, driver, 15); 
     MYSQL = StrEqual(driver, "mysql", false);
     LogMessage("Установлено %s соединение", MYSQL ? "MYSQL" : "SQLite");
   
    }
   
 
public OnClientPostAdminCheck(client) 
{    
    if (!IsFakeClient(client))
    {
   
        decl String:steamid[32],String:clientname[24];
        decl String:country[45]; 
        decl String:ip[64]; 
 
        GetClientName(client, clientname, sizeof(clientname));
        GetClientIP(client, ip, sizeof(ip));
        GeoipCountry(ip, country, sizeof(country)); 
       GetClientAuthId(client,AuthId_Steam2,steamid,sizeof(steamid));
  char query[256], szAuth[32];
 
        GetClientAuthId(client, AuthId_Engine, szAuth, sizeof(szAuth), true);
         
        Format(query, sizeof(query), "UPDATE IGNORE `users` SET `steamid` = '%s' WHERE `ip` = '%s';", steamid, ip);    
       SQL_TQuery(g_SQL, SQL_Callback_UpdateSteamid, query)
    }  
}
До того, как данные для подключение внес в исходник, callback был в таком виде, но теперь он не подходит и варианты которые я пробовал, тоже не работают. Подскажите как правильно

PHP:
public void SQL_Callback_UpdateSteamid(Database hDatabase, DBResultSet results, const char[] sError, any iUserID)
    {
    if(sError[0])
    {    
      LogError("SQL_Callback_UpdateSteamid: %s", sError);
        return;
    }
    new iClient = GetClientOfUserId(iUserID);
    if (iClient > 0 && SQL_GetAffectedRows(results) < 1 && !IsClientInKickQueue(iClient))  
{
}  
}
 

gibs

Фитиль народного волненья
Сообщения
722
Реакции
407
Мошенник
Ну вообще ты берёшь клиента из юзерайди, который не передается в коллбек. Но а так работать должно, хоть и написано не очень аккуратно.
 

Drop

Участник
Сообщения
41
Реакции
1
Ну вообще ты берёшь клиента из юзерайди, который не передается в коллбек. Но а так работать должно, хоть и написано не очень аккуратно.
странно, у меня при компиляции выдает ошибку error 100: function prototypee do not match
на строке:
PHP:
SQL_TQuery(g_SQL, SQL_Callback_UpdateSteamid, query);
я думал
то с клбеком как рази связано?
 

gibs

Фитиль народного волненья
Сообщения
722
Реакции
407
Мошенник
Используй просто старый синтаксис коллбека
PHP:
public SQLTCallback(Handle:owner, Handle:hndl, const String:error[], any:data) {}
 

Drop

Участник
Сообщения
41
Реакции
1
Я пробовал. В таком случае, при компиляции, ругается на то, что не знает, что такое userid, results
 
Последнее редактирование:

gibs

Фитиль народного волненья
Сообщения
722
Реакции
407
Мошенник
Ну так просто переименуй аргументы под свои нужды
 

Drop

Участник
Сообщения
41
Реакции
1
сдела так:
PHP:
public SQL_Callback_checkbans(Handle:owner, Handle:results, const String:sError[], any:iUserID)
{
    if(sError[0])
    {
      LogError("SQL_Callback_checkbans: %s", sError);
        return;
    }
    new iClient = GetClientOfUserId(iUserID);
    if (iClient > 0 && SQL_GetAffectedRows(results) > 0 && !IsClientInKickQueue(iClient))
{
   KickClient(iClient, "banned");
}
}
но не работает. то есть компилится, плагин работает, другие функции работают, но та часть плагина, которая зависит от колбэка не работает. что тут может быть не правильным?
 

gibs

Фитиль народного волненья
Сообщения
722
Реакции
407
Мошенник
Прочитай ещё раз мой первый ответ и попытайся понять его.
 
Сверху Снизу