Szerző Téma: MySQL Escape átalakítja a szöveget  (Megtekintve 610 alkalommal)

MySQL Escape átalakítja a szöveget
« Dátum: 2013. május 16. - 18:13:09 »
0 Show voters
Helló!
A problémám az, hogy valami rejtélyes oknál fogva, a \"mysql_real_escape_string\" (mindegyik pluginnál)
elég ergyán mûködik. A gond az hogy mikor kikérek egy adatot az adatbázistól, még normálisan escapeli a játékos nevét, de ha többször próbálok adatot lekérni mindig beleilleszt egy \'Ü\' karaktert, ezáltal nem kéri le az adatot.
Adat lekérése:
E: A stock a játékos adatát kéri, nem a karakterét, de a lényege ugyanez, ugyanígy mûködik.
 
stock GetPlayerData( playerid, to_read[], size = sizeof(to_read), mit[] = \"nem\" )
{
new esced_playerName[ 24 + 1 ];
new temp_Name[ 24 + 1 ];
format( temp_Name, (24), \"%s\", PlayerName(playerid) );
mysql_real_escape_string( temp_Name, esced_playerName );
if( Compare(mit, \"nem\") )
{
       format( Query, sizeof(Query), \"SELECT * FROM `players` WHERE `name` = \'%s\'\", esced_playerName );
}
else
{
    format( Query, sizeof(Query), \"SELECT `%s` FROM `players` WHERE `name` = \'%s\'\", mit, esced_playerName );
}
mysql_query( Query );
mysql_store_result( );
    mysql_fetch_row_format( to_read, \"|\" );
mysql_free_result( );
if( strlen(to_read) < 1 )
{
    format( to_read, size, \"InvalidCharacter\" );
}
return true;
}

 
Kiolvasás:
 
stock LoadCharacter( playerid ) 
{
    new g_Temp[ 64 + 1 ];
   
    GetCharacterData( playerid, g_Temp, (64), \"money\" );
    playerInfo[ playerid ][ Penz ] = strval( g_Temp );
   
    GetCharacterData( playerid, g_Temp, (64), \"skin\" );
    playerInfo[ playerid ][ Skin ] = strval( g_Temp );
   
    GetCharacterData( playerid, g_Temp, (64), \"level\" );
    playerInfo[ playerid ][ Szint ] = strval( g_Temp );
    // -------------------------------------------------------------------------
   
    SetPlayerSkin( playerid, playerInfo[ playerid ][ Skin ] );
GivePlayerMoney( playerid, playerInfo[ playerid ][ Penz ] );
SetPlayerScore( playerid, playerInfo[ playerid ][ Szint ] );
   
return 1;
}

 
A gond nem az hogy Invalid Character értéket kapok.. hanem hogy azt az értéket kapják meg, amit elõször kiolvasok. Jelen esetben minden érték a \'money\' mezõ értéke.
MySQL Log:
 
[17:53:20] >> mysql_real_escape_string( Connection handle: 1 )
[17:53:21] CMySQLHandler::EscapeString(Horváth Flórián); - Escaped 15 characters to Horváth Flórián.
[17:53:21] >> mysql_query( Connection handle: 1 )
[17:53:21] CMySQLHandler::Query(SELECT `money` FROM `p_chars` WHERE `name` = \'Horváth Flórián\') - Successfully executed.
[17:53:21] >> mysql_store_result( Connection handle: 1 )
[17:53:21] CMySQLHandler::StoreResult() - Result was stored.
[17:53:21] >> mysql_fetch_row_format( Connection handle: 1 )
[17:53:21] CMySQLHandler::FetchRow() - Return: 1500
[17:53:21] >> mysql_free_result( Connection handle: 1 )
[17:53:21] CMySQLHandler::FreeResult() - Result was successfully free\'d.
[17:53:21] >> mysql_real_escape_string( Connection handle: 1 )
[17:53:21] CMySQLHandler::EscapeString(HorvátÜ Flórián); - Escaped 15 characters to HorvátÜ Flórián.
[17:53:21] >> mysql_query( Connection handle: 1 )
[17:53:21] CMySQLHandler::Query(SELECT `skin` FROM `p_chars` WHERE `name` = \'HorvátÜ Flórián\') - Successfully executed.
[17:53:21] >> mysql_store_result( Connection handle: 1 )
[17:53:21] CMySQLHandler::StoreResult() - Result was stored.
[17:53:21] >> mysql_fetch_row_format( Connection handle: 1 )
[17:53:21] >> mysql_free_result( Connection handle: 1 )
[17:53:21] CMySQLHandler::FreeResult() - Result was successfully free\'d.
[17:53:21] >> mysql_real_escape_string( Connection handle: 1 )
[17:53:21] CMySQLHandler::EscapeString(HÜrvátÜ Flórián); - Escaped 15 characters to HÜrvátÜ Flórián.
[17:53:21] >> mysql_query( Connection handle: 1 )
[17:53:21] CMySQLHandler::Query(SELECT `level` FROM `p_chars` WHERE `name` = \'HÜrvátÜ Flórián\') - Successfully executed.
[17:53:21] >> mysql_store_result( Connection handle: 1 )
[17:53:21] CMySQLHandler::StoreResult() - Result was stored.
[17:53:21] >> mysql_fetch_row_format( Connection handle: 1 )
[17:53:21] >> mysql_free_result( Connection handle: 1 )
[17:53:21] CMySQLHandler::FreeResult() - Result was successfully free\'d.
« Utoljára szerkesztve: 2013. május 16. - 18:14:49 írta Fl0rian »

MySQL Escape átalakítja a szöveget
« Válasz #1 Dátum: 2013. május 16. - 21:13:00 »
+1 Show voters
Szerintem készíts egy többmenetes mysql_real_escape_string függvényt írasd ki minden egyes meghívás után print-el, ha a probléma fennáll, akkor írd ki a plugin topicjába bug-ként, és majd a plugin készítõje remélhetõleg javítani fogja.

MySQL Escape átalakítja a szöveget
« Válasz #2 Dátum: 2013. május 16. - 22:03:12 »
0 Show voters
A GetPlayerData többszörös használata után változik egy string.. úgy hogy hozzá se nyúl SEMMI.
Ez úgy kuka ahogy van, rohadjon meg.
Azért köszi. zárom.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal