MySQL Tutorial
From SA-MP Wiki
| 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
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
Click "Go" and there will be some empty spaces to fill in your data. (fig. 3)
fig. 3
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)
