MySQL Tutorial

From SA-MP Wiki

(Difference between revisions)
Jump to: navigation, search
Revision as of 10:36, 5 May 2010
Faraday (Talk | contribs)
(Mysql tutorial moved to MySQL Tutorial)
← Previous diff
Revision as of 19:30, 27 December 2010
LaZ (Talk | contribs)
(Like you said, the first function is to CONNECT to the MySQL server, not to check if the connection was successful or not. For that, you should use mysql_ping.)
Next diff →
Line 56: Line 56:
public ConnectMySQL() public ConnectMySQL()
{ {
- if(mysql_connect(SQL_HOST,SQL_USER,SQL_DB,SQL_PASS))+ mysql_connect(SQL_HOST, SQL_USER, SQL_DB, SQL_PASS))
- {+
- mysql_debug(1);+ if(mysql_ping())
- printf("[MYSQL]: Connection to `%s` succesful!",SQL_DB);+ {
- }+ mysql_debug(1);
 + printf("[MYSQL]: Connection to `%s` succesful!", SQL_DB);
 + }
else else
{ {
- printf("[MYSQL]: [ERROR]: Connection to `%s` failed!",SQL_DB);+ printf("[MYSQL]: [ERROR]: Connection to `%s` failed!", SQL_DB);
} }
return 1; return 1;
Line 84: Line 86:
Your Query will have to look like this (this is standard MySQL language): Your Query will have to look like this (this is standard MySQL language):
<pawn> <pawn>
-mysql_query("INSERT INTO `users` (`username`, `password`) VALUES ('%s', MD5('%s'))",PlayerName, password);+mysql_query("INSERT INTO `users` (`username`, `password`) VALUES ('%s', MD5('%s'))", PlayerName, password);
</pawn> </pawn>
Note: MD5() will hash the users' password. Note: MD5() will hash the users' password.
Line 90: Line 92:
- If you want to login a player, you can check if his password is correct by string comparison. To retreive the password from the database, you'll need to use a format like this: - If you want to login a player, you can check if his password is correct by string comparison. To retreive the password from the database, you'll need to use a format like this:
<pawn> <pawn>
-mysql_query("SELECT `password` FROM `users` WHERE `username` = '%s'",PlayerName);+mysql_query("SELECT `password` FROM `users` WHERE `username` = '%s'", PlayerName);
</pawn> </pawn>
''Note'': After this Query, you will have to store your result using mysql_store_result(). This will have the plugin remember the last returned result. When this function has been called, you can use functions like, mysql_fetch_row_format, where you split the string using a delimiter. The functions, available for use can be found here: http://forum.sa-mp.com/index.php?topic=79352.0. ''Note'': After this Query, you will have to store your result using mysql_store_result(). This will have the plugin remember the last returned result. When this function has been called, you can use functions like, mysql_fetch_row_format, where you split the string using a delimiter. The functions, available for use can be found here: http://forum.sa-mp.com/index.php?topic=79352.0.
Line 98: Line 100:
- If you want to update some parameters, maybe save a user in OnPlayerDisconnect, you'll have to update the database like this: - If you want to update some parameters, maybe save a user in OnPlayerDisconnect, you'll have to update the database like this:
<pawn> <pawn>
-mysql_query("UPDATE `users` SET `fieldname` = '%s' WHERE `username` = '%s'",string to update);+mysql_query("UPDATE `users` SET `fieldname` = '%s' WHERE `username` = '%s'", string to update);
</pawn> </pawn>

Revision as of 19:30, 27 December 2010

Basic MySQL Tutorial

Plugin: I'm using the MySQL plugin from G-sTyLeZzZ. Info & download: [1]

Hosting Environment: First thing to do is create a virtual server on your pc for local testing. In this tutorial I will be using wampserver. You can download it here: [2] In wampserver, when Installed you can find "phpmyadmin". We will use that to control our MySQL database.

Controlling your Database: After the installation we will have to create a database. Click the icon in the system tray of your operation system, and open phpmyadmin. There you will see there are already a few databases installed. We will just create a new one. Fill in the database name and click "Create". (fig. 1)

fig. 1 create_db.png

Once your database has been created, we will need a table to store data in. I will use the user table example, since this is the most used for MySQL registration systems in servers.

So click on your database and fill in the fields to create a new table. We will make a 'users' table with 3 fields. Adding fields beyond this point is very easy, so we will just start out with 3. (fig. 2) fig. 2 create_table.png

Click "Go" and there will be some empty spaces to fill in your data. (fig. 3)

fig. 3 fields.png

So fill in the data like in the picture. (fig. 3) In the userid column I checked the AUTO_INCREMENT box. This means that MySQL will number the userid into ascending order.

Once this has been setup we can go to the pawn script.


Pawno Script: First of all we have to define the connection parameters. Standard, when you're localtesting, there's no password. So we can define it like this:

#define SQL_HOST "localhost"
#define SQL_USER "root"
#define SQL_PASS ""
#define SQL_DB "DB_NAME"//  You'll have to change this to the name of the database created in phpmyadmin

This makes it easy to connect to another host.

Connecting to the MySQL Server: The way I do it, is making seperate functions. This makes it easier to use, and it makes everything more clear to oversee.

The first function is to connect MySQL and is a function we will put in OnGameModeInit.

forward ConnectMySQL();
public ConnectMySQL()
{
	mysql_connect(SQL_HOST, SQL_USER, SQL_DB, SQL_PASS))
 
        if(mysql_ping())
        {    
            mysql_debug(1);
	    printf("[MYSQL]: Connection to `%s` succesful!", SQL_DB);
	} 
	else
	{
	    printf("[MYSQL]: [ERROR]: Connection to `%s` failed!", SQL_DB);
	}
	return 1;
}

Note: if mysql_debug is turned on (value: 1), it means that the plugin will create a file for debugging purposes. The file will be mysql_log.txt, in your server directory.

By now you should be able to connect to the MySQL database.

The part that comes next, requires some basic Pawno knowledge, since I won't be posting code snippets for commands or functions, if you want those things, the best thing to do is download some gamemodes or filterscripts with MySQL systems.


Common Queries: Now I will show some basic Queries to send, to retreive info from the database, write to the database, etc..

* Example:

- When you want to register a new user, you will have to insert a new row into the table. Your Query will have to look like this (this is standard MySQL language):

mysql_query("INSERT INTO `users` (`username`, `password`) VALUES ('%s', MD5('%s'))", PlayerName, password);

Note: MD5() will hash the users' password.

- If you want to login a player, you can check if his password is correct by string comparison. To retreive the password from the database, you'll need to use a format like this:

mysql_query("SELECT `password` FROM `users` WHERE `username` = '%s'", PlayerName);

Note: After this Query, you will have to store your result using mysql_store_result(). This will have the plugin remember the last returned result. When this function has been called, you can use functions like, mysql_fetch_row_format, where you split the string using a delimiter. The functions, available for use can be found here: http://forum.sa-mp.com/index.php?topic=79352.0. After processing the returned result by the plugin, you will have to liberate the result from the memory, using mysql_free_result(). Note: You will also have to return the hash on the password that has been returned from the Query. You can use MD5 for that.

- If you want to update some parameters, maybe save a user in OnPlayerDisconnect, you'll have to update the database like this:

mysql_query("UPDATE `users` SET `fieldname` = '%s' WHERE `username` = '%s'", string to update);

- If you want to get a total number of rows, from some table, for example we can lookup the total number of users with:

mysql_query("SELECT * FROM `users`");

Note: This will select everything from the users table. When this has been returned via mysql_store_result(), you can call mysql_num_rows(). This will give you the total amount of rows (a.k.a total amount of users), which you can store in a variable.

General Note: Using backticks, like I did in all of my examples, is not necessary for MySQL. I just use it due to habit.

--Faraday 08:58, 30 March 2010 (UTC)

Personal tools