MySQL Query
#1

A recent issue popped up, and I guarantee I've spent a good amount of time trying to solve this myself but I can't seem to figure it out.

In the LoginPlayer function, ID returns as 4 (which is what my database says as well) and is supposed to be saved in the Player[playerid][ID] enumerator. The problem is that "WHERE ID" in the SavePlayer function should be returning '4' but it's returning '0' so it's not updating the correct area of the database. What am I doing wrong?

Here is the code used to log players in:

PHP код:
stock LoginPlayer(playerid)
{
    new 
query[126];
    new 
pName[MAX_PLAYER_NAME];
    
GetPlayerName(playeridpNamesizeof(pName));
    
    
format(querysizeof(query), "SELECT * FROM user_accounts WHERE Username = '%s'"pName);
    
mysql_query(query);
    
mysql_store_result();
    
    while(
mysql_fetch_row_format(query"|"))
    {
        
mysql_fetch_field_row(Player[playerid][Username], "Username");
        
mysql_fetch_field_row(Player[playerid][Password], "Password");
        
mysql_fetch_field_row(query"PlayerPos"); sscanf(query"fff"Player[playerid][Position][0], Player[playerid][Position][1], Player[playerid][Position][2]);
        
mysql_fetch_field_row(query"AdminLevel"); Player[playerid][AdminLevel] = strval(query);
        
mysql_fetch_field_row(query"Skin"); Player[playerid][Skin] = strval(query);
        
mysql_fetch_field_row(query"LoggedIn"); Player[playerid][LoggedIn] = strval(query);
        
mysql_fetch_field_row(query"Money"); Player[playerid][Money] = strval(query);
        
mysql_fetch_field_row(query"ID"); Player[playerid][ID] = strval(query);
    }
    
    
GivePlayerMoney(playeridPlayer[playerid][Money]);

And the MySQL debug responses for that area:

Код:
[09:44:10] >> mysql_query( Connection handle: 1 )

[09:44:10] CMySQLHandler::Query(SELECT * FROM bans WHERE (Username = 'Shadow' OR IPAddress = '') AND Status = 1) - Successfully executed.

[09:44:10] >> mysql_store_result( Connection handle: 1 )

[09:44:10] CMySQLHandler::StoreResult() - Result was stored.

[09:44:10] >> mysql_num_rows( Connection handle: 1 )

[09:44:11] CMySQLHandler::NumRows() - Returned 0 row(s)

[09:44:11] >> mysql_free_result( Connection handle: 1 )

[09:44:11] CMySQLHandler::FreeResult() - Result was successfully free'd.

[09:44:11] >> mysql_query( Connection handle: 1 )

[09:44:11] CMySQLHandler::Query(SELECT * FROM user_accounts WHERE Username = 'Shadow') - Successfully executed.

[09:44:11] >> mysql_store_result( Connection handle: 1 )

[09:44:11] CMySQLHandler::StoreResult() - Result was stored.

[09:44:11] >> mysql_num_rows( Connection handle: 1 )

[09:44:11] CMySQLHandler::NumRows() - Returned 0 row(s)

[09:44:13] >> mysql_query( Connection handle: 1 )

[09:44:13] CMySQLHandler::Query(INSERT INTO user_accounts (Username, Password, PlayerPos, Skin) VALUES ('Shadow', '310BB28AC7B16438667836D8EDB887544B49BFC6212BC1A8217F284DBD43D5F2B9ACEF89E6530C9A47B84372EB139044D5AC1D6C33D0227CDF1ADF046CFD7F3D', '1.0 2.0 3.0', '0')) - Successfully executed.

[09:44:13] >> mysql_query( Connection handle: 1 )

[09:44:13] CMySQLHandler::Query(SELECT * FROM user_accounts WHERE Username = 'Shadow') - Successfully executed.

[09:44:13] >> mysql_store_result( Connection handle: 1 )

[09:44:13] CMySQLHandler::StoreResult() - Result was stored.

[09:44:13] >> mysql_fetch_row_format( Connection handle: 1 )

[09:44:13] CMySQLHandler::FetchRow() - Return: Shadow|310BB28AC7B16438667836D8EDB887544B49BFC6212BC1A8217F284DBD43D5F2B9ACEF89E6530C9A47B84372EB139044D5AC1D6C33D0227CDF1ADF046CFD7F3D|1.0 2.0 3.0|0|0|0|0|4

[09:44:13] >> mysql_fetch_field_row( Connection handle: 1 )

[09:44:13] CMySQLHandler::FetchField("Username") - Shadow

[09:44:13] >> mysql_fetch_field_row( Connection handle: 1 )

[09:44:13] CMySQLHandler::FetchField("Password") - 310BB28AC7B16438667836D8EDB887544B49BFC6212BC1A8217F284DBD43D5F2B9ACEF89E6530C9A47B84372EB139044D5AC1D6C33D0227CDF1ADF046CFD7F3D

[09:44:13] >> mysql_fetch_field_row( Connection handle: 1 )

[09:44:13] CMySQLHandler::FetchField("PlayerPos") - 1.0 2.0 3.0

[09:44:13] >> mysql_fetch_field_row( Connection handle: 1 )

[09:44:13] CMySQLHandler::FetchField("AdminLevel") - 0

[09:44:13] >> mysql_fetch_field_row( Connection handle: 1 )

[09:44:13] CMySQLHandler::FetchField("Skin") - 0

[09:44:13] >> mysql_fetch_field_row( Connection handle: 1 )

[09:44:13] CMySQLHandler::FetchField("LoggedIn") - 0

[09:44:13] >> mysql_fetch_field_row( Connection handle: 1 )

[09:44:13] CMySQLHandler::FetchField("Money") - 0

[09:44:13] >> mysql_fetch_field_row( Connection handle: 1 )

[09:44:13] CMySQLHandler::FetchField("ID") - 4

[09:44:13] >> mysql_fetch_row_format( Connection handle: 1 )
And here is where the problem is:

PHP код:
stock SavePlayer(playerid)
{
    new 
query[1024];
    new 
EncryptedPass[130];
    
WP_Hash(EncryptedPasssizeof(EncryptedPass), Player[playerid][Password]);
    new 
pName[MAX_PLAYER_NAME];
    
    
GetPlayerName(playeridpNamesizeof(pName));
    
    
Player[playerid][Money] = GetPlayerMoney(playerid);
    
Player[playerid][Skin] = GetPlayerSkin(playerid);
    if( !
IsPlayerConnected(playerid) )
    {
        
Player[playerid][LoggedIn] = 0;
    } else {
        
Player[playerid][LoggedIn] = 1;
    }
    
    
GetPlayerPos(playeridPlayer[playerid][Position][0], Player[playerid][Position][1], Player[playerid][Position][2]);
    
    
format(querysizeof(query), "UPDATE user_accounts SET Username = '%s', Password = '%s', PlayerPos = '%f %f %f', AdminLevel = '%d', Skin = '%d', LoggedIn = '%d', Money = '%d' WHERE ID = '%d'"pNameEncryptedPassPlayer[playerid][Position][0], Player[playerid][Position][1], Player[playerid][Position][2], Player[playerid][AdminLevel], Player[playerid][Skin], Player[playerid][LoggedIn], Player[playerid][Money], Player[playerid][ID]);
    
mysql_query(query);
    
printf("Player ID %d (%s) has been updated"playeridpName);

And the corresponding MySQL debug response:

Код:
[09:45:11] >> mysql_query( Connection handle: 1 )

[09:45:11] CMySQLHandler::Query(UPDATE user_accounts SET Username = 'Shadow', Password = '19FA61D75522A4669B44E39C1D2E1726C530232130D407F89AFEE0964997F7A73E83BE698B288FEBCF88E3E03C4F0757EA8964E59B63D93708B138CC42A66EB3', PlayerPos = '2075.546386 2036.309204 10.820312', AdminLevel = '0', Skin = '2', LoggedIn = '1', Money = '0' WHERE ID = '0') - Successfully executed.
Reply
#2

The problem isn't in saving, it's in loading. If it loaded correctly then it would display the correct value, however it's not. Can you send a picture of your database structure?
Reply
#3

use name insteed of id

WHERE Name and also use %e insteed of %s


and you are using old mysql plugin use newone which is best
Reply
#4

Quote:
Originally Posted by BleverCastard
Посмотреть сообщение
The problem isn't in saving, it's in loading. If it loaded correctly then it would display the correct value, however it's not. Can you send a picture of your database structure?


The loading function returns the correct values according to the debug file, but I'm guessing it isn't saving it to the enumerator it's supposed to. ID is an auto_incremented table item but I guess as the guy after you said I could use the player's name instead.
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)