MySQL Plugin
Najbolji i najpopularniji MySQL plugin za SA:MP!
10/12/2013:
Projekt prebacen sa googlecode na githubOvaj plugin vam omogucava da koristite MySQL u PAWNu. Projekt trenutno razvijaju Pain123/maddinat0r; naci ces sve starije verzije ukljucujuci source code i primjere skripti, od R5 do R7 na kraju ovog posta, a zadnju verziju mozete pronaci na GitHub
Kako instalirati:
Kopirajte mysql.dll (windows) ili mysql.so (linux) u vas folder 'plugins/'. Ako koristite windows morate preuzeti mysql library (libmysql.dll, pogledaj download stranicu) i kopirati ga u glavni folder vaseg servera. Server conifg (server.cfg) mora biti izmjenjen takodje.
Windows:
plugins mysqlLinux:
plugins mysql.soPAWN Scripting R5-R7: (a_mysql.inc)
- Native functions: (Svi parametri u zagradama su opcioni.)
- * = R5, R6 (Podrzava threaded and non-threaded skripte)
- * = R7 (Podrzava samo threaded scripts)
- Caching tutorial - Click!
mysql_affected_rows ( [connectionHandle = 1] ) * *
mysql_close ( [connectionHandle = 1] ) * *
- Make sure you call this on OnGameModeExit()/OnFilterscriptExit()
mysql_connect ( const host[], const user[], const database[], const password[] ) *
mysql_connect ( const host[], const user[], const database[], const password[] [, port = 3306] ) *
- Returns a connection handle you can use for multiple connections
mysql_debug ( enable = 1 ) * *
- Enables the debug modus and creates a log file named mysql.log
mysql_errno ( [connectionHandle = 1] ) * *
mysql_fetch_int ( [connectionHandle = 1] ) *
mysql_fetch_field_row ( string[], const fieldname[] [,connectionHandle = 1] ) * *
mysql_fetch_float ( &Float:result [,connectionHandle = 1] ) *
mysql_fetch_row_format ( string[], const delimiter[] = "|" [,connectionHandle = 1] ) * *
mysql_field_count ( [connectionHandle = 1] ) * *
mysql_format ( connectionHandle, output[], format[], {Float,_}:... ) * (works on R6-2 aswell)
Supported formats: (including precisions)
- %e (escapes a string at once, no mysql_real_escape_string() needed)
- %s (string)
- %d / %i (integer)
- %f (float)
- %x (hex)
- %b (binary)
new szDestination;
mysql_format(connectionHandle, szDestination, "SELECT * FROM `%s` WHERE `bar` = '%e' AND `foobar` = '%.2f' LIMIT %d", "foobar", "escape'me\"please", 1.2345, 1337);
// the variable 'szDestination' contains now the formatted query (including the escaped string)
mysql_query(szDestination);mysql_free_result ( [connectionHandle = 1] ) * *
mysql_get_charset ( destination[] [,connectionHandle = 1] ) * *
mysql_insert_id ( [connectionHandle = 1] ) * *
mysql_num_rows ( [connectionHandle = 1] ) * *
mysql_num_fields ( [connectionHandle = 1] ) * *
mysql_ping ( [connectionHandle = 1] ) * *
- Returns true (1) if the connection is alive, else (-1)
mysql_query ( query[] [,resultid = (-1), extraid = (-1), connectionHandle = 1] ) *
- Setting result id to something else than (-1), triggers the OnQueryFinish callback
mysql_query_callback ( index, query[], callback[] [, extraid = (-1), connectionHandle = 1] ) * *
- Allows you to create custom callbacks for better structured coding (See sample_script.pwn below)
mysql_real_escape_string ( iconst source[], destination[] [,connectionHandle = 1] ) * *
mysql_reconnect ( [connectionHandle = 1] ) * *
mysql_reload ( [connectionHandle = 1] ) **
mysql_retrieve_row ( [connectionHandle = 1] ) **
- Returns true (1) incase there are still rows to retrieve, else false (0)
mysql_set_charset ( charset[] [,connectionHandle = 1] ) **
mysql_stat ( const destination[] [,connectionHandle = 1] ) **
mysql_store_result ( [connectionHandle = 1] ) **
mysql_warning_count ( [connectionHandle = 1] ) **
cache_get_row ( row, idx, dest[] [, connectionHandle = 1] ) *
cache_get_field ( field_index, dest[] [, connectionHandle = 1] ) *
cache_get_data ( &num_rows, &num_fields [, connectionHandle = 1] ) *
cache_get_field_content ( row, const field_name[], dest[] [, connectionHandle = 1] ) *
enable_mutex ( bool:enable ) *
- Disable mutexes incase you experience random crashes. (seems to happen on some linux distros only)
mysql_function_query ( connectionHandle, query[], bool:cache, callback[], format[], {Float,_}:... ) *
mysql_function_query(connectionHandle, "UPDATE `foo` SET `bar` = 1", false, "CustomResponse", "dsf", 1337, "string", 1.5634);
public CustomResponse(integer, string[], Float:float)
{
printf("Query successful executed. Data: %d | %s | %f", integer, string, float);
return 1;
}- Pawn Callback:
OnQueryFinish ( query[], resultid, extraid, connectionHandle ) * - Sample usage (updated)
OnQueryError ( errorid, error[], resultid, extraid, callback[], query[], connectionHandle ) *
OnQueryError ( errorid, error[], callback[], query[], connectionHandle ) *
Compiling Notes:
- Windows: Otvorite projekt sa Microsoft Visual C++ i kliknite build dugme. (MySQL Visual Studio/C++ je potrebno)
- Linux: Install gcc, gpp & mysql-client i upisite "make" u folderu source fajlova.
Downloads: (za nove updatove, korisitite github stranicu na vrhu posta!)
NOTE: NEMOJ KORISTITI VERZIJU R7 I VECU AKO NE ZNAS STA ZNACI THREADING I KAKO SE KORISTI. MOZES JEDINO OSTETITI SVOJ SERVER AKO GA NE KORISTIS PRAVILNO.
- Windows: (zahtjeva .NET Framework)
R7: Server plugin (VS9)
R6: Server plugin (VS9)
R5: Server plugin (VS9)
libmysql.dll
- Linux: (x86 (32-bit) version is cross compatible)
R7: Ubuntu, x86 (compiled on Ubuntu)
R6: CentOS, Debian 5, x86 (compiled on CentOS), x86 (compiled on Debian5)
R5: CentOS, Debian 5, x86
libmysqlclient.so.15 - Getting this error.. 'libmysqlclient.so.15: cannot open shared [..]' ? - Read This
- Scripting:
R7: a_mysql.inc, Sample Script (shows how to use the cache_*() functions), Blank Gamemode (uses the cache method)
R5, R6: a_mysql.inc, Sample Script
Archive: PHP Class, Modified sample script (by nemesis) (only >= R5 compatible)
- Source: (Cross-Compatible)
R7: Source code
R6: Source code
R5: Source code
Zahvale:
Chaprnks, Gehaktbal, JaTochNietDan, LS:RP Tester team, Webflori (Testing)
AndreT (Testing/Cache Tutorial)
JernejL (Testing/Suggestions)
krisk (Testing/Suggestions)
Kye (Coding support)
Mow (Compiling/Testing/Hosting)
nemesis (Testing)
Pain123 (Developing the plugin as of R😎
Sergei (Testing/Suggestions/Wiki documentation)
xxmitsu (Testing/Compiling)
