Dmitry Beast, смотря какой у вас amxx
в 1.8.3 есть специальная функция
в 1.8.2 нужно запрос делать SET NAMES 'utf8';
Subb98 писал(а): RevCrew, cyberforum предложил бы, но что меня там бесит: создаёшь тему с вопросом - тебе отвечают ссылками на похожие темы, где даны ответы точно такими же ссылками на похожие темы с ответами с точно такими же ссылками. Как будто не на форум зашёл, а на порно-сайт с unlimited-redirect'ами.
Модераторы: Subb98, liFe iS GoOD
RevCrew писал(а):Dmitry Beast, смотря какой у вас amxx
в 1.8.3 есть специальная функция
в 1.8.2 нужно запрос делать SET NAMES 'utf8';
SQL_SetCharset(g_sql_tuple, "utf8")
RevCrew писал(а):
- Код: Выделить всё
SQL_SetCharset(g_sql_tuple, "utf8")
#include <amxmodx>
#include <sqlx>
#define PLUGIN "Sql"
#define VERSION "1"
#define AUTHOR "BeasT"
#define LOG_FILE "addons/amxmodx/logs/Log.log"
#define MAX_CLIENTS 32
new Handle:g_Sqlx
new g_cvars[4];
new const g_cvars_string[][] =
{
"stats_sql_host",
"stats_sql_user",
"stats_sql_pass",
"stats_sql_db"
}
new const g_cvars_value[][] =
{
}
new g_iAuth[MAX_CLIENTS+1][32],
bool:g_iLoad[MAX_CLIENTS + 1],
g_playername[MAX_CLIENTS+1][MAX_CLIENTS]
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
for(new j = 0; j<sizeof(g_cvars_string);j++)
g_cvars[j] = register_cvar(g_cvars_string[j],g_cvars_value[j])
SQL_Init_Connect();
SQL_Prepare_Table();
}
public plugin_end()
{
SQL_FreeHandle(g_Sqlx)
}
public SQL_Init_Connect()
{
static data[4][64];
for(new i = 0; i<4;i++)
get_pcvar_string(g_cvars[i],data[i],63)
g_Sqlx = SQL_MakeDbTuple(data[0],data[1],data[2],data[3])
static g_Error[128],ErrorCode
static Handle:SqlConnection;SqlConnection = SQL_Connect(g_Sqlx,ErrorCode,g_Error,127)
if(SqlConnection == Empty_Handle)
{
Print_to_log("Can't connect to Mysql (Error %s)",g_Error)
Print_to_log("Host <%s> User <%s> DB <%s>",data[0],data[1],data[2])
set_task(20.0,"SQL_Init_Connect")
}
else Print_to_log("Connection for Database run success!")
SQL_FreeHandle(SqlConnection);
}
SQL_Prepare_Table()
{
static Query[512],len;
len = formatex(Query, charsmax(Query), "CREATE TABLE IF NOT EXISTS `Stats` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,`player_name` varchar(32) NOT NULL,")
len += formatex(Query[len], charsmax(Query)- len," `player` int(10) NOT NULL, PRIMARY KEY (`id`));")
SQL_ThreadQuery(g_Sqlx, "QueryCreateTable", Query);
}
public client_putinserver(id)
{
get_user_authid(id,g_iAuth[id],charsmax(g_iAuth[]))
get_user_name(id, g_playername[id], charsmax(g_playername[]))
LoadData( id );
}
LoadData(id)
{
static query[128],data[1];data[0]=id
formatex(query, sizeof(query) - 1,\
"SELECT * FROM `Stats` WHERE `player_id` = '%s'",\
g_iAuth[id]
);
SQL_ThreadQuery(g_Sqlx,"LoadDataPlayer",query, data, 1)
}
Save_Data(id)
{
static query[256],data[1];data[0]=id
static ip[26]; get_user_ip(id,ip,25,1)
if( g_iLoad[id])
{
formatex(query, sizeof(query) - 1, "UPDATE `Stats` SET `player_name` = ^"%s^" WHERE `player_id` = '%s';", g_playername[id],g_iAuth[id]);
}
else
formatex(query, sizeof(query) - 1, "INSERT INTO `Stats` ( `player_name`, `player_id` ) VALUES ( '%s', '%s' );", g_playername[id],g_iAuth[id]);
SQL_ThreadQuery(g_Sqlx,"SaveDataPlayer",query, data, 1)
}
public QueryCreateTable(failstate, Handle:query, error[], errcode, data[], datasize, Float:queuetime)
{
if(failstate)
{
return SQL_Error(query, error, errcode, failstate);
}
return SQL_FreeHandle(query)
}
public LoadDataPlayer(failstate, Handle:query, error[], errcode, data[], datasize, Float:queuetime)
{
if(failstate)
{
return SQL_Error(query, error, errcode, failstate);
}
static id;id=data[0];
if(SQL_NumResults(query))
{
g_iLoad[id] = true
}
else
{
g_iLoad[id] = false
}
return SQL_FreeHandle(query);
}
public SaveDataPlayer(failstate, Handle:query, error[], errcode, data[], datasize, Float:queuetime)
{
if(failstate)
{
return SQL_Error(query, error, errcode, failstate);
}
return SQL_FreeHandle(query);
}
stock Print_to_log(const szMessage[], any:...)
{
static szMsg[256];
vformat(szMsg, charsmax(szMsg), szMessage, 2);
log_amx("[Stats] %s",szMsg)
log_to_file(LOG_FILE,"[Stats] %s",szMsg)
return;
}
stock SQL_Error(Handle:query, const error[], errornum, failstate)
{
static qstring[512]
SQL_GetQueryString(query, qstring, 1023)
if(failstate == TQUERY_CONNECT_FAILED)
{
Print_to_log("[SQLX] Error connected to database")
}
else if (failstate == TQUERY_QUERY_FAILED)
{
Print_to_log("[SQLX] Failed")
}
Print_to_log("[SQLX] Error '%s' with '%s'", error, errornum)
Print_to_log("[SQLX] %s", qstring)
set_task(20.0,"SQL_Init_Connect")
return SQL_FreeHandle(query)
}
public SQL_Init_Connect()
{
/////
g_Sqlx = SQL_MakeDbTuple(data[0],data[1],data[2],data[3])
SQL_SetCharset(g_Sqlx, "utf8")
/////
RevCrew писал(а):Что то типа того
- Код: Выделить всё
public SQL_Init_Connect()
{
/////
g_Sqlx = SQL_MakeDbTuple(data[0],data[1],data[2],data[3])
SQL_SetCharset(g_Sqlx, "utf8")
/////
Сейчас этот форум просматривают: Yandex [Bot] и гости: 14