#include <amxmodx>
#include <sqlx>
#define AUTHOR "aSior - amxx.pl/user/60210-asiorr/"
// Uchwyt polaczenia z baza.
new Handle:mysqlHandle;
// Dane do bazy.
new const mysqlData[][] =
{
"",
"",
"",
""
};
enum _: (+= 1)
{
mysqlHost,
mysqlUser,
mysqlPass,
mysqlDBase
};
public plugin_init()
{
register_plugin("x", "v0.1", AUTHOR);
}
public plugin_precache()
{
connectMysql();
}
// Laczy sie z baza danych i tworzy tabele o nazwie 'nazwa_tabeli' z dwoma polami: 'someIntValue' oraz 'someStringValue'.
connectMysql()
{
new errorMessage[512],
errorCode,
queryRequest[256],
Handle:temporaryHandle,
Handle:query;
mysqlHandle = SQL_MakeDbTuple(mysqlData[mysqlHost], mysqlData[mysqlUser], mysqlData[mysqlPass], mysqlData[mysqlDBase]);
temporaryHandle = SQL_Connect(mysqlHandle, errorCode, errorMessage, charsmax(errorMessage));
formatex(queryRequest, charsmax(queryRequest),
"CREATE TABLE IF NOT EXISTS `nazwa_tabeli`\
(`someIntValue` int(5) NOT NULL auto_increment, \
`someStringValue` VARCHAR(35) NOT NULL, \
PRIMARY KEY(`someIntValue`))");
query = SQL_PrepareQuery(temporaryHandle, queryRequest);
SQL_FreeHandle(query);
}
// Pobiera wszystkie dane z bazy danych.
stock loadData()
{
new queryRequest[128];
formatex(queryRequest, charsmax(queryRequest), "SELECT * FROM `nazwa_tabeli`");
SQL_ThreadQuery(mysqlHandle, "dataRetrieve", queryRequest, queryData, sizeof(queryData));
}
// Zapisuje losowa liczbe z zakresu 0-100 i napis "abc".
stock saveData()
{
new queryRequest[192];
formatex(queryRequest, charsmax(queryRequest),
"INSERT INTO `nazwa_tabeli` \
(`someIntValue`, \
`someStringValue`) \
VALUES (%i, '%s');", random_num(0, 100), "abc");
SQL_ThreadQuery(mysqlHandle, "ignore_handle", queryRequest);
}
// Aktualizuje dane w bazie w rekorach, w których pole 'someIntValue' jest >= 50 na someIntValue = 150 i someStringValue = "xyz".
stock updateData()
{
new queryCommand[512];
formatex(queryCommand, charsmax(queryCommand),
"UPDATE `nazwa_tabeli` \
SET \
`someIntValue` = '%i', \
`someStringValue` = ^"%s^" \
WHERE \
`someIntValue` >= '%i';", 150, "xyz", 50);
SQL_ThreadQuery(mysqlHandle, "ignore_handle", queryCommand);
}
// Odczytuje wszystkie dane, jakie zostana zwrocone przez baze. Rowniez obsluguje bledy, jesli takowe wystapia.
public dataRetrieve(failState, Handle:query, errorMessage[], errorCode, queryData[], dataSize)
{
if(errorCode)
{
log_amx("Blad w zapytaniu: %s", errorMessage);
}
if(failState == TQUERY_CONNECT_FAILED)
{
log_amx("Nie mozna podlaczyc sie do bazy danych.");
return PLUGIN_CONTINUE;
}
else if(failState == TQUERY_QUERY_FAILED)
{
log_amx("Zapytanie anulowane");
return PLUGIN_CONTINUE;
}
new dataRetrieved[30],
i;
while(SQL_MoreResults(query))
{
dataRetrieved[i] = SQL_ReadResult(query, i);
i++;
SQL_NextRow(query);
}
return PLUGIN_CONTINUE;
}
// Ignoruje dane zwrotne. Przydatne, kiedy nie chcemy nic z nimi robic.
public ignore_handle(failState, Handle:query, error[], errorNum, data[], dataSize)
{
if(failState)
{
if(failState == TQUERY_CONNECT_FAILED)
{
log_amx("Could not connect to SQL database. [%d] %s", errorNum, error);
}
else if(failState == TQUERY_QUERY_FAILED)
{
log_amx("Query failed. [%d] %s query: %d", errorNum, error, query);
}
}
return PLUGIN_CONTINUE;
}