[Plugin] [REL] MySQL Plugin (Now on github!)

  • MySQL Plugin
    The best and most famous MySQL plugin for SA:MP out there!

    Code:

    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.

    Project home
    Latest changes
    Source Code
    Downloads
    Wiki (Version >= R33)


    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.

    • Windows

      Code:

      Code
      plugins mysql
    • Linux

      Code:

      Code
      plugins mysql.so


    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:


      • 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:

        C
        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.

    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!

  • 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.

  • 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.

  • 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?

  • 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.

  • 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?

  • 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!

  • 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 )

  • 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.!

  • 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..

  • 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?