GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Segítségkérés => A témát indította: doboka98 - 2014. Március 28. - 18:00:28

Cím: MySQL fetch row
Írta: doboka98 - 2014. Március 28. - 18:00:28
Sziasztok! Most tanulgatom a mysqlt-t és írom át a szerverem arra. Egy problémába ütköztem, nem tölt be rendesen. Konkrétan az a baj, hogy minden integer értéknek 48-as számot ír. Ezzel mit lehet tenni? Szerintem valahol itt lesz a baj.
 
stock LoginPlayer(playerid)
{
new query[128+1];
format(query, sizeof(query), \"SELECT * FROM karakterek WHERE username = \'%s\'\", playername(playerid));
mysql_query(query);
mysql_store_result();
while(mysql_fetch_row_format( query, \"|\"))
{
    mysql_fetch_field_row(pInfo[playerid][admin], \"admin\");
    mysql_fetch_field_row(pInfo[playerid][ora], \"ora\");
    mysql_fetch_field_row(pInfo[playerid][mperc], \"mperc\");
    mysql_fetch_field_row(pInfo[playerid][penz], \"penz\");
    mysql_fetch_field_row(pInfo[playerid][firstreg], \"firstreg\");
    mysql_fetch_field_row(pInfo[playerid][frakcio], \"frakcio\");
    mysql_fetch_field_row(pInfo[playerid][rang], \"rang\");
    mysql_fetch_field_row(pInfo[playerid][nem], \"nem\");
    mysql_fetch_field_row(pInfo[playerid][kor], \"kor\");
    mysql_fetch_field_row(pInfo[playerid][skin], \"skin\");
    mysql_fetch_field_row(pInfo[playerid][telefonsz], \"telefonsz\");
}
}
Cím: MySQL fetch row
Írta: ZyZu. - 2014. Március 28. - 18:23:14
Használj sscanf darabolást.. én is csak azt ismerem..
 

stock LoginPlayer( playerid )
{
        new query[128+1];
        format(query, sizeof(query), \"SELECT * FROM karakterek WHERE username = \'%s\'\", playername(playerid));
        mysql_query(query);
        mysql_store_result();
        mysql_fetch_row_format(query, \"|\");
        sscanf( query, \"darabolás..\", pInfo[ playerid ]... );
        mysql_free_result( );
        return 1;
}

 
Ha nem tudnád, hogy kéne darabolni akkor tessék egy leírás példával: http://forum.sa-mp.com/showthread.php?t=120356
Cím: MySQL fetch row
Írta: doboka98 - 2014. Március 28. - 18:46:03
Csak ezzel nincs egy olyan gond, hogy muszáj mindegyiket kikérjem? Mert a táblámban van egy olyan, hogy password és én azt nem akarom kikérni (nincs is enumom rá). És ha kihagyok egyet, akkor elcsúszik az egész.
Cím: MySQL fetch row
Írta: Dfoglalo - 2014. Március 28. - 19:22:10
Ne
 
SELECT * FROM

 
-ot írj, hanem sorold fel a lekérdezendõ oszlopok nevét. Pl.
 
SELECT admin, ora, stb. ... skin, telefonsz FROM

 
persze csak ha jól értettem, és ez a problémád az utolsó hsz-edben.
Cím: MySQL fetch row
Írta: doboka98 - 2014. Március 28. - 19:26:36
Enélkül is kéne mûködjön. Egy tutorialt néztem, ahol a mysql_fetch_row sorok így voltak leírva stringnél. Na de nekem ezek integer adatok és kérdés, hogy ugyanígy kell-e.
Cím: MySQL fetch row
Írta: Zsolesszka - 2014. Március 28. - 22:01:38
A beolvasott adat általában karakterláncként van tárolva, emiatt nem tudod közvetlen integer változóba helyezni.
A kód prototípusában is látható,
 
mysql_fetch_field_row(destination[], const fieldname[], connectionHandle = 1, max_len=sizeof(destination));[/quote]
szögletes zárójelek is erre utalnak.
Ha te továbbra is ezt a megoldást szeretnéd használni akkor létre kell hozni egy újabb karakterlánc tárolására szolgáló változót, amit egy másik eljárással (strval, floatstr, ..) átalakítva tudsz majd elhelyezni a létrehozott enum változóidba:
 
    stock LoginPlayer(playerid)
    {
            new
      query[128+1],
      data[64];
            format(query, sizeof(query), \"SELECT * FROM karakterek WHERE username = \'%s\'\", playername(playerid));
            mysql_query(query);
            mysql_store_result();
           
            while(mysql_fetch_row_format( query, \"|\"))
            {
                mysql_fetch_field_row(data, \"admin\");             pInfo[playerid][admin] = strval(data);
                mysql_fetch_field_row(data \"ora\");               pInfo[playerid][ora] = strval(data);
      // Elõfordulhat olyan változó alkalmazás ami nem egész szám (float) azt floatsrt(data) használatával tudod elhelyezni szintén egy float típusú változóba.
                // mysql_fetch_field_row(pInfo[playerid][mperc], \"mperc\");
                // mysql_fetch_field_row(pInfo[playerid][penz], \"penz\");
                // mysql_fetch_field_row(pInfo[playerid][firstreg], \"firstreg\");
                // mysql_fetch_field_row(pInfo[playerid][frakcio], \"frakcio\");
                // mysql_fetch_field_row(pInfo[playerid][rang], \"rang\");
                // mysql_fetch_field_row(pInfo[playerid][nem], \"nem\");
                // mysql_fetch_field_row(pInfo[playerid][kor], \"kor\");
                // mysql_fetch_field_row(pInfo[playerid][skin], \"skin\");
                // mysql_fetch_field_row(pInfo[playerid][telefonsz], \"telefonsz\");
            }
    }
Cím: MySQL fetch row
Írta: ZyZu. - 2014. Március 28. - 22:33:53
Idézetet írta: ɐʞzssǝlosz date=1396040498\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"47401\" data-ipsquote-contentclass=\"forums_Topic
A beolvasott adat általában karakterláncként van tárolva, emiatt nem tudod közvetlen integer változóba helyezni.
A kód prototípusában is látható,
 
mysql_fetch_field_row(destination[], const fieldname[], connectionHandle = 1, max_len=sizeof(destination));
szögletes zárójelek is erre utalnak.
Ha te továbbra is ezt a megoldást szeretnéd használni akkor létre kell hozni egy újabb karakterlánc tárolására szolgáló változót, amit egy másik eljárással (strval, floatstr, ..) átalakítva tudsz majd elhelyezni a létrehozott enum változóidba:
 
    stock LoginPlayer(playerid)
    {
            new
      query[128+1],
      data[64];
            format(query, sizeof(query), \"SELECT * FROM karakterek WHERE username = \'%s\'\", playername(playerid));
            mysql_query(query);
            mysql_store_result();
           
            while(mysql_fetch_row_format( query, \"|\"))
            {
                mysql_fetch_field_row(data, \"admin\");             pInfo[playerid][admin] = strval(data);
                mysql_fetch_field_row(data \"ora\");               pInfo[playerid][ora] = strval(data);
      // Elõfordulhat olyan változó alkalmazás ami nem egész szám (float) azt floatsrt(data) használatával tudod elhelyezni szintén egy float típusú változóba.
                // mysql_fetch_field_row(pInfo[playerid][mperc], \"mperc\");
                // mysql_fetch_field_row(pInfo[playerid][penz], \"penz\");
                // mysql_fetch_field_row(pInfo[playerid][firstreg], \"firstreg\");
                // mysql_fetch_field_row(pInfo[playerid][frakcio], \"frakcio\");
                // mysql_fetch_field_row(pInfo[playerid][rang], \"rang\");
                // mysql_fetch_field_row(pInfo[playerid][nem], \"nem\");
                // mysql_fetch_field_row(pInfo[playerid][kor], \"kor\");
                // mysql_fetch_field_row(pInfo[playerid][skin], \"skin\");
                // mysql_fetch_field_row(pInfo[playerid][telefonsz], \"telefonsz\");
            }
    }

 

[/quote]
A sscanf felbontás nem jobb? mivel sokkal egyszerûbb a lekérdezése és a betöltése, vagy talán tévedek? :D
Cím: MySQL fetch row
Írta: doboka98 - 2014. Március 29. - 08:44:55
Ezer köszönet! Este én is pont erre gondoltam :D . Köszi nagyon szépen Zsolesz!
Cím: MySQL fetch row
Írta: doboka98 - 2014. Március 28. - 18:00:28
Sziasztok! Most tanulgatom a mysqlt-t és írom át a szerverem arra. Egy problémába ütköztem, nem tölt be rendesen. Konkrétan az a baj, hogy minden integer értéknek 48-as számot ír. Ezzel mit lehet tenni? Szerintem valahol itt lesz a baj.
 
stock LoginPlayer(playerid)
{
new query[128+1];
format(query, sizeof(query), \"SELECT * FROM karakterek WHERE username = \'%s\'\", playername(playerid));
mysql_query(query);
mysql_store_result();
while(mysql_fetch_row_format( query, \"|\"))
{
    mysql_fetch_field_row(pInfo[playerid][admin], \"admin\");
    mysql_fetch_field_row(pInfo[playerid][ora], \"ora\");
    mysql_fetch_field_row(pInfo[playerid][mperc], \"mperc\");
    mysql_fetch_field_row(pInfo[playerid][penz], \"penz\");
    mysql_fetch_field_row(pInfo[playerid][firstreg], \"firstreg\");
    mysql_fetch_field_row(pInfo[playerid][frakcio], \"frakcio\");
    mysql_fetch_field_row(pInfo[playerid][rang], \"rang\");
    mysql_fetch_field_row(pInfo[playerid][nem], \"nem\");
    mysql_fetch_field_row(pInfo[playerid][kor], \"kor\");
    mysql_fetch_field_row(pInfo[playerid][skin], \"skin\");
    mysql_fetch_field_row(pInfo[playerid][telefonsz], \"telefonsz\");
}
}
Cím: MySQL fetch row
Írta: ZyZu. - 2014. Március 28. - 18:23:14
Használj sscanf darabolást.. én is csak azt ismerem..
 

stock LoginPlayer( playerid )
{
        new query[128+1];
        format(query, sizeof(query), \"SELECT * FROM karakterek WHERE username = \'%s\'\", playername(playerid));
        mysql_query(query);
        mysql_store_result();
        mysql_fetch_row_format(query, \"|\");
        sscanf( query, \"darabolás..\", pInfo[ playerid ]... );
        mysql_free_result( );
        return 1;
}

 
Ha nem tudnád, hogy kéne darabolni akkor tessék egy leírás példával: http://forum.sa-mp.com/showthread.php?t=120356
Cím: MySQL fetch row
Írta: doboka98 - 2014. Március 28. - 18:46:03
Csak ezzel nincs egy olyan gond, hogy muszáj mindegyiket kikérjem? Mert a táblámban van egy olyan, hogy password és én azt nem akarom kikérni (nincs is enumom rá). És ha kihagyok egyet, akkor elcsúszik az egész.
Cím: MySQL fetch row
Írta: Dfoglalo - 2014. Március 28. - 19:22:10
Ne
 
SELECT * FROM

 
-ot írj, hanem sorold fel a lekérdezendõ oszlopok nevét. Pl.
 
SELECT admin, ora, stb. ... skin, telefonsz FROM

 
persze csak ha jól értettem, és ez a problémád az utolsó hsz-edben.
Cím: MySQL fetch row
Írta: doboka98 - 2014. Március 28. - 19:26:36
Enélkül is kéne mûködjön. Egy tutorialt néztem, ahol a mysql_fetch_row sorok így voltak leírva stringnél. Na de nekem ezek integer adatok és kérdés, hogy ugyanígy kell-e.
Cím: MySQL fetch row
Írta: Zsolesszka - 2014. Március 28. - 22:01:38
A beolvasott adat általában karakterláncként van tárolva, emiatt nem tudod közvetlen integer változóba helyezni.
A kód prototípusában is látható,
 
mysql_fetch_field_row(destination[], const fieldname[], connectionHandle = 1, max_len=sizeof(destination));[/quote]
szögletes zárójelek is erre utalnak.
Ha te továbbra is ezt a megoldást szeretnéd használni akkor létre kell hozni egy újabb karakterlánc tárolására szolgáló változót, amit egy másik eljárással (strval, floatstr, ..) átalakítva tudsz majd elhelyezni a létrehozott enum változóidba:
 
    stock LoginPlayer(playerid)
    {
            new
      query[128+1],
      data[64];
            format(query, sizeof(query), \"SELECT * FROM karakterek WHERE username = \'%s\'\", playername(playerid));
            mysql_query(query);
            mysql_store_result();
           
            while(mysql_fetch_row_format( query, \"|\"))
            {
                mysql_fetch_field_row(data, \"admin\");             pInfo[playerid][admin] = strval(data);
                mysql_fetch_field_row(data \"ora\");               pInfo[playerid][ora] = strval(data);
      // Elõfordulhat olyan változó alkalmazás ami nem egész szám (float) azt floatsrt(data) használatával tudod elhelyezni szintén egy float típusú változóba.
                // mysql_fetch_field_row(pInfo[playerid][mperc], \"mperc\");
                // mysql_fetch_field_row(pInfo[playerid][penz], \"penz\");
                // mysql_fetch_field_row(pInfo[playerid][firstreg], \"firstreg\");
                // mysql_fetch_field_row(pInfo[playerid][frakcio], \"frakcio\");
                // mysql_fetch_field_row(pInfo[playerid][rang], \"rang\");
                // mysql_fetch_field_row(pInfo[playerid][nem], \"nem\");
                // mysql_fetch_field_row(pInfo[playerid][kor], \"kor\");
                // mysql_fetch_field_row(pInfo[playerid][skin], \"skin\");
                // mysql_fetch_field_row(pInfo[playerid][telefonsz], \"telefonsz\");
            }
    }
Cím: MySQL fetch row
Írta: ZyZu. - 2014. Március 28. - 22:33:53
Idézetet írta: ɐʞzssǝlosz date=1396040498\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"47401\" data-ipsquote-contentclass=\"forums_Topic
A beolvasott adat általában karakterláncként van tárolva, emiatt nem tudod közvetlen integer változóba helyezni.
A kód prototípusában is látható,
 
mysql_fetch_field_row(destination[], const fieldname[], connectionHandle = 1, max_len=sizeof(destination));
szögletes zárójelek is erre utalnak.
Ha te továbbra is ezt a megoldást szeretnéd használni akkor létre kell hozni egy újabb karakterlánc tárolására szolgáló változót, amit egy másik eljárással (strval, floatstr, ..) átalakítva tudsz majd elhelyezni a létrehozott enum változóidba:
 
    stock LoginPlayer(playerid)
    {
            new
      query[128+1],
      data[64];
            format(query, sizeof(query), \"SELECT * FROM karakterek WHERE username = \'%s\'\", playername(playerid));
            mysql_query(query);
            mysql_store_result();
           
            while(mysql_fetch_row_format( query, \"|\"))
            {
                mysql_fetch_field_row(data, \"admin\");             pInfo[playerid][admin] = strval(data);
                mysql_fetch_field_row(data \"ora\");               pInfo[playerid][ora] = strval(data);
      // Elõfordulhat olyan változó alkalmazás ami nem egész szám (float) azt floatsrt(data) használatával tudod elhelyezni szintén egy float típusú változóba.
                // mysql_fetch_field_row(pInfo[playerid][mperc], \"mperc\");
                // mysql_fetch_field_row(pInfo[playerid][penz], \"penz\");
                // mysql_fetch_field_row(pInfo[playerid][firstreg], \"firstreg\");
                // mysql_fetch_field_row(pInfo[playerid][frakcio], \"frakcio\");
                // mysql_fetch_field_row(pInfo[playerid][rang], \"rang\");
                // mysql_fetch_field_row(pInfo[playerid][nem], \"nem\");
                // mysql_fetch_field_row(pInfo[playerid][kor], \"kor\");
                // mysql_fetch_field_row(pInfo[playerid][skin], \"skin\");
                // mysql_fetch_field_row(pInfo[playerid][telefonsz], \"telefonsz\");
            }
    }

 

[/quote]
A sscanf felbontás nem jobb? mivel sokkal egyszerûbb a lekérdezése és a betöltése, vagy talán tévedek? :D
Cím: MySQL fetch row
Írta: doboka98 - 2014. Március 29. - 08:44:55
Ezer köszönet! Este én is pont erre gondoltam :D . Köszi nagyon szépen Zsolesz!