[REL] MySQL Plugin (Now on github!) -
BlueG - 29.11.2008
MySQL Plugin
The best and most famous MySQL plugin for SA:MP out there!
Code:
10/12/2013:
The project has been moved from ******code to github
This plugin allows you to use
MySQL in PAWN. It's currently being developed by
Pain123/maddinat0r; you'll find
all older versions, including
source codes and
sample scripts,
from R5 to R7 at the
bottom of this post and the latest release
here.
How to install:
Move
mysql.dll (windows) or
mysql.so (linux) to your 'plugins/' directory. On windows you'll have to download the mysql library (libmysql.dll, see downloads) and move it to your main server directory. The
server configuration (server.cfg) has to be edited aswell.
PAWN Scripting R5-R7: (a_mysql.inc)
- Native functions: (All parameters in squared brackets are optional)
- * = R5, R6 (supports threaded and non-threaded scripts)
- * = R7 (supports only threaded scripts)
- Caching guide - 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)
pawn Code:
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[100];
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( const 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,_}:... ) *
pawn Code:
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)
- This is just called if you used the 'resultid' parameter in the query function
- OnQueryError( errorid, error[], resultid, extraid, callback[], query[], connectionHandle ) *
- OnQueryError( errorid, error[], callback[], query[], connectionHandle ) *
Compiling Notes:
- Windows: Open the project file with Microsoft Visual C++ and click the build button. (MySQL Visual Studio/C++ is required of course)
- Linux: Install gcc, gpp & mysql-client and type "make" in the source files folder.
Downloads: (for newer updates, use the github project site above!)
NOTE: DON'T USE VERSION R7 OR ABOVE IF YOU HAVE NO IDEA WHAT THREADING MEANS OR HOW IT WORKS. YOU MIGHT HARM YOUR SERVER WHEN USING IT NOT PROPERLY.
- Windows: (requires .NET Framework)
- Linux: (x86 (32-bit) version is cross compatible)
- Scripting:
- Source: (Cross-Compatible)
Thanks to:
- 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 R8)
- Sergei (Testing/Suggestions/Wiki documentation)
- xxmitsu (Testing/Compiling)
If you have any questions, post them here!
Re: [REL] Alternative MySQL Plugin (+example PAWN/PHP script) -
JaTochNietDan - 29.11.2008
Good job GStylezzz
Re: [REL] Alternative MySQL Plugin (+example PAWN/PHP script) -
Bardokas - 29.11.2008
Need something better to get values. It would be great to have mysql_get_field() or c_strtok() like in [RAZ]ADreNaLiNe-DJ plugin are.
Re: [REL] Alternative MySQL Plugin (+example PAWN/PHP script) -
BlueG - 30.11.2008
Quote:
Originally Posted by Bardokas
Need something better to get values. It would be great to have mysql_get_field() or c_strtok() like in [RAZ]ADreNaLiNe-DJ plugin are.
|
There is already a strtok function in PAWN.'mysql_fetch_row' returns like the following format if you selected more than one row in the query:
row1 row2 row3
Now you can just use strtok to split it in tokens.Also 'mysql_get_field' is probably a good idea for the next version.
Re: [REL] Alternative MySQL Plugin (+example PAWN/PHP script) -
Bardokas - 30.11.2008
I know strtok function in PAWN, but in C i think it will be faster?
Re: [REL] Alternative MySQL Plugin (+example PAWN/PHP script) -
Meester Proper - 01.12.2008
hey
does the memory deallocation work here correctly?
Re: [REL] Alternative MySQL Plugin (+example PAWN/PHP script) -
Balon - 01.12.2008
I think so. The code is much cleaner here and I hadn't any problems with this plugin on Debian 4.0 ETCH.
Re: [REL] Alternative MySQL Plugin (+example PAWN/PHP script) -
Extremo - 01.12.2008
Somebody is finally adding some more stuff to mysql, great job!
Re: [REL] Alternative MySQL Plugin (+example PAWN/PHP script) -
Yaheli_Faro - 01.12.2008
Do I have to know PHP to make a page that shows user stats online?
Re: [REL] Alternative MySQL Plugin (+example PAWN/PHP script) -
JaTochNietDan - 01.12.2008
Quote:
Originally Posted by Yaheli
Do I have to know PHP to make a page that shows user stats online?
|
Yes, quite limited PHP though, I thought it was hard at first but after going through other Control Panels code its actually quite easy going to PHP from some PAWN knowledge.
Re: [REL] Alternative MySQL Plugin (+example PAWN/PHP script) -
Yaheli_Faro - 01.12.2008
Quote:
Originally Posted by JaTochNietDan
Quote:
Originally Posted by Yaheli
Do I have to know PHP to make a page that shows user stats online?
|
Yes, quite limited PHP though, I thought it was hard at first but after going through other Control Panels code its actually quite easy to match PHP + SA-MP
|
Hm... you have anything good I can learn from?
Re: [REL] Alternative MySQL Plugin (+example PAWN/PHP script) -
JaTochNietDan - 01.12.2008
Quote:
Originally Posted by Yaheli
Quote:
Originally Posted by JaTochNietDan
Quote:
Originally Posted by Yaheli
Do I have to know PHP to make a page that shows user stats online?
|
Yes, quite limited PHP though, I thought it was hard at first but after going through other Control Panels code its actually quite easy to match PHP + SA-MP
|
Hm... you have anything good I can learn from?
|
Well you need to learn some basic SQL first, I thought it was very hard but after I got into it and a bit of help from G-Stylezzz its quite easy. Then once you know some basic SQL just download Los Santos Next Episodes control panel by G-Stylezz and take a look at how he integrates user stats etc. Its a bit of a learning curve but its worth learning.
Re: [REL] Alternative MySQL Plugin (+example PAWN/PHP script) -
Yaheli_Faro - 01.12.2008
Quote:
Originally Posted by JaTochNietDan
Quote:
Originally Posted by Yaheli
Quote:
Originally Posted by JaTochNietDan
Quote:
Originally Posted by Yaheli
Do I have to know PHP to make a page that shows user stats online?
|
Yes, quite limited PHP though, I thought it was hard at first but after going through other Control Panels code its actually quite easy to match PHP + SA-MP
|
Hm... you have anything good I can learn from?
|
Well you need to learn some basic MySQL first, I thought it was very hard but after I got into it and a bit of help from G-Stylezzz its quite easy. Then once you know some basic MySQL just download Los Santos Next Episodes control panel by G-Stylezz and take a look at how he integrates user stats etc. Its a bit of a learning curve but its worth learning.
|
And i'm guessing that to learn basic MySQL I need to go to their webpage?
Re: [REL] Alternative MySQL Plugin (+example PAWN/PHP script) -
JaTochNietDan - 01.12.2008
Quote:
Originally Posted by Yaheli
Quote:
Originally Posted by JaTochNietDan
Quote:
Originally Posted by Yaheli
Quote:
Originally Posted by JaTochNietDan
Quote:
Originally Posted by Yaheli
Do I have to know PHP to make a page that shows user stats online?
|
Yes, quite limited PHP though, I thought it was hard at first but after going through other Control Panels code its actually quite easy to match PHP + SA-MP
|
Hm... you have anything good I can learn from?
|
Well you need to learn some basic MySQL first, I thought it was very hard but after I got into it and a bit of help from G-Stylezzz its quite easy. Then once you know some basic MySQL just download Los Santos Next Episodes control panel by G-Stylezz and take a look at how he integrates user stats etc. Its a bit of a learning curve but its worth learning.
|
And i'm guessing that to learn basic MySQL I need to go to their webpage?
|
http://www.w3schools.com/PHP/php_mysql_intro.asp
That is an extremely good website for learning ANYTHING!
Re: [REL] Alternative MySQL Plugin (+example PAWN/PHP script) -
rafay - 02.12.2008
OMG! A ready made php script! :O
Respect man! thx
EDIT: FFS, I cant see the download button --..--
Re: [REL] Alternative MySQL Plugin (+example PAWN/PHP script) -
Yaheli_Faro - 02.12.2008
Quote:
Originally Posted by Rafay
OMG! A ready made php script! :O
Respect man! thx
EDIT: FFS, I cant see the download button --..--
|
It isn't exactly a ready made php script, theres lots of work to do... (Which I am having trouble understanding
)
Re: [REL] Alternative MySQL Plugin (+example PAWN/PHP script) -
rafay - 02.12.2008
Quote:
Originally Posted by Yaheli
Quote:
Originally Posted by Rafay
OMG! A ready made php script! :O
Respect man! thx
EDIT: FFS, I cant see the download button --..--
|
It isn't exactly a ready made php script, theres lots of work to do... (Which I am having trouble understanding )
|
& i can't even download it!
Somebody upload it to somewhere please.!
Re: [REL] Alternative MySQL Plugin (+example PAWN/PHP script) -
FrankZZ - 02.12.2008
When I execute a SELECT query, selecting multiple rows, and I call the mysql_fetch_row function, the server crashes.
though it does not when i limit the results to 1 row..
Re: [REL] Alternative MySQL Plugin (+example PAWN/PHP script) -
JaTochNietDan - 02.12.2008
Quote:
Originally Posted by Rafay
Quote:
Originally Posted by Yaheli
Quote:
Originally Posted by Rafay
OMG! A ready made php script! :O
Respect man! thx
EDIT: FFS, I cant see the download button --..--
|
It isn't exactly a ready made php script, theres lots of work to do... (Which I am having trouble understanding )
|
& i can't even download it!
Somebody upload it to somewhere please.!
|
What script?
Re: [REL] Alternative MySQL Plugin (+example PAWN/PHP script) -
Ycto - 02.12.2008
Hai!
Nice work on the plugin!
@ Yaheli: You can take a look at SAMPSt's php files.You can learn quite a lot out of these. Link:
http://forum.sa-mp.com/index.php?topic=23380.0