Keli klausimai [MYSQL]

Šiame forume rašomi vartotojų klausimai/problemos su kuriomis jie susidūrė kuriant pluginus.
Post Reply
User avatar
psychical
Viršininkas
Posts: 2094
Joined: 2011 Mar 12 22:19
Skype: tautvydas11
Location: Linksmakalnis
Contact:

Keli klausimai [MYSQL]

Post by psychical »

Code: Select all

mySQLConnect(){    if ( gMySQL >= SQL_OK ) {        if ( !get_pcvar_num(persistent) ) close_mysql();        else return;    }     static host[64], user[32], pass[32], db[32], error[128];     get_pcvar_string(sql_host, host, 63);    get_pcvar_string(sql_user, user, 31);    get_pcvar_string(sql_pass, pass, 31);    get_pcvar_string(sql_db, db, 31);     if ( host[0] == '^0' && user[0] == '^0' && db[0] == '^0' ) {        get_cvar_string("amx_mysql_host", host, 63);        get_cvar_string("amx_mysql_user", user, 31);        get_cvar_string("amx_mysql_pass", pass, 31);        get_cvar_string("amx_mysql_db", db, 31);    }     gMySQL = dbi_connect(host, user, pass, db, error, 127)    if ( gMySQL <= SQL_FAILED ) {        log_amx("MySQL connect error: '%s' (%s,%s,%s)", error, host, user, db);        return;    }    else if ( CreateTables ) {        // Only try to create the tables once        static sql[512];        new Result:retval;         copy(sql, 511, "CREATE TABLE IF NOT EXISTS `jb_bank` ( `ip` varchar(32) binary NOT NULL default '', `credits` int(10) NOT NULL default '0', PRIMARY KEY  (`IP`) ) TYPE=MyISAM COMMENT='ZP Credits saving table'");        retval = dbi_query(gMySQL, sql);        if ( retval <= RESULT_FAILED ) {            dbi_error(gMySQL, error, 127);            log_amx("Error Making Tables: '%s' - '%s'", error, sql);            return;        }        CreateTables = false;    }} close_mysql(){    if ( gMySQL <= SQL_FAILED || get_pcvar_num(persistent) ) return;     dbi_close(gMySQL);} save_data(id) //kai atsijungia{    mySQLConnect();       new name[32] , IP[35] , GetDate[9];    get_user_name(id, name, 31) , get_user_ip(id, IP, 29, 1) , get_time("%m-%d", GetDate, 8);     static error[128], sql[512];    new Result:retval, Result:retvalins;       formatex(sql, 511, "SELECT * FROM `jb_bank` WHERE `IP` = '%s'", IP)    retval = dbi_query(gMySQL, sql)     if ( retval <= RESULT_FAILED ) {        dbi_error(gMySQL, error, 127);        log_amx("Error Querying MySQL DB for %s: '%s' - '%s'", IP, error, sql);        return;    }    else if ( retval == RESULT_NONE || !dbi_nextrow(retval) ) {        formatex(sql, 511, "INSERT INTO `jb_bank` (ip,credits,name,date) VALUES ('%s','%d','%s','%s')", IP, g_jbpacks[id], name, GetDate);        retvalins = dbi_query(gMySQL, sql);        if ( retvalins <= RESULT_FAILED ) {            dbi_error(gMySQL, error, 127);            log_amx("Error Writing MySQL Ammo Packs for %s: '%s' - '%s'", IP, error, sql);            return;        }    }     if ( retval >= RESULT_OK ) dbi_free_result(retval);     //Update users entry with current data    formatex(sql, 511, "UPDATE `jb_bank` SET `credits`='%d', `name`='%s', `date`='%s' WHERE name='%s'", g_jbpacks[id], name, GetDate, name);    retval = dbi_query(gMySQL, sql);    if (retval <= RESULT_FAILED) {        dbi_error(gMySQL, error, 127);        log_amx("Error Writing MySQL XP for %s: '%s' - '%s'", IP, error, sql);        return;    }       //Closes the connection if set not to be persistent    close_mysql()} retrieve_data(id) //kai prisijungia{    new name[35], IP[35];    get_user_name(id, name, 31) , get_user_ip(id, IP, 29, 1)       mySQLConnect();    if ( gMySQL <= SQL_FAILED ) return;     static sql[512], error[128];    new Result:retvalxp;     formatex(sql, 511, "SELECT `credits` FROM `jb_bank` WHERE `name` = '%s'", name);    retvalxp = dbi_query(gMySQL, sql);     if ( retvalxp <= RESULT_FAILED ) {        dbi_error(gMySQL, error, 127);        log_amx("Error Loading MySQL Credits for %s: '%s' - '%s'", IP, error, sql);        return;    }    else if ( retvalxp == RESULT_NONE || !dbi_nextrow(retvalxp) ) {        dbi_error(gMySQL, error, 127);        log_amx("No Saved Ammmo Packs Loaded for %s: '%s'", IP, error);         if ( retvalxp >= RESULT_OK ) dbi_free_result(retvalxp);         //Closes the connection if set not to be persistent        close_mysql();         return;    }     static amp[13];    new storagenum     dbi_field(retvalxp, 1, amp, 12);    storagenum = str_to_num(amp);    g_jbpacks[id] = storagenum     if ( retvalxp >= RESULT_OK ) dbi_free_result(retvalxp);     //Closes the connection if set not to be persistent    close_mysql();     }
Saugau viska ant nick, pries tai saugbojo ant ip, taciau tapati klaida, kai buna daug zmoniu, kartais sukeicia JBP kiekius ir issaugo skirtingai, imanoma kiap nors sutvarkyt?

P.S. I lenteles "CREATE" ir "INSERT"/"UPDATE" sintaxe neziurekit, nes sukurta lentele kitokia, nei cia prasoma sukurti.

P.S.S. Primary key pakeistas

User avatar
aaarnas
Vyr. diskusijų administratorius
Posts: 3891
Joined: 2010 Aug 31 13:21
Skype: fiarno
Contact:

Re: Keli klausimai [MYSQL]

Post by aaarnas »

Kurių galų pastoviai prisijungi ir atsijungi nuo mysql serverio?? Jungtis nuolatos turi būti atvira ir išjungiama tik keičiant žemėlapį (plugin_end).
Be to naudoji seną sql sistemą. Ji nėra tokia patikima.
Palikau CS pasaulį ;/ . Nebepasiekiamas.

User avatar
psychical
Viršininkas
Posts: 2094
Joined: 2011 Mar 12 22:19
Skype: tautvydas11
Location: Linksmakalnis
Contact:

Re: Keli klausimai [MYSQL]

Post by psychical »

aaarnas wrote:Kurių galų pastoviai prisijungi ir atsijungi nuo mysql serverio?? Jungtis nuolatos turi būti atvira ir išjungiama tik keičiant žemėlapį (plugin_end).
Be to naudoji seną sql sistemą. Ji nėra tokia patikima.

Su amx mysql nk nzn, taciau klausimas, tai tipo kad neuzdarinet to prisijungimo, tai is receiv data istrinti

Code: Select all

    //Closes the connection if set not to be persistent    close_mysql(); 
?

User avatar
aaarnas
Vyr. diskusijų administratorius
Posts: 3891
Joined: 2010 Aug 31 13:21
Skype: fiarno
Contact:

Re: Keli klausimai [MYSQL]

Post by aaarnas »

mySQLConnect(); į plugins_init()

close_mysql() į plugin_end()

Visur kitur juos ištrink.
Palikau CS pasaulį ;/ . Nebepasiekiamas.

User avatar
psychical
Viršininkas
Posts: 2094
Joined: 2011 Mar 12 22:19
Skype: tautvydas11
Location: Linksmakalnis
Contact:

Re: Keli klausimai [MYSQL]

Post by psychical »

aaarnas wrote:mySQLConnect(); į plugins_init()

close_mysql() į plugin_end()

Visur kitur juos ištrink.

Bet as labai abejoju ar tai pades su tuo ne tam zmogui perdavimu...

P.S. Gunxp irgi gal ta pacia nesmaone padaryt reikia? Nes man gunxp modas su mysql ant map keitimosi naudoja 78% CPU :D

User avatar
aaarnas
Vyr. diskusijų administratorius
Posts: 3891
Joined: 2010 Aug 31 13:21
Skype: fiarno
Contact:

Re: Keli klausimai [MYSQL]

Post by aaarnas »

Tai nelabai dar suprasi ką čia ir padaręs tu.

Čia randi žmogų pagal ip adresą:

Code: Select all

formatex(sql, 511, "SELECT * FROM `jb_bank` WHERE `IP` = '%s'", IP)
O po to jau saugai viską ant nick:

Code: Select all

formatex(sql, 511, "UPDATE `jb_bank` SET `credits`='%d', `name`='%s', `date`='%s' WHERE name='%s'", g_jbpacks[id], name, GetDate, name);
Nesąmoninga tai. Kai tu ieškai pagal "WHERE name='%s'"", taigi čia gali būti visai kitas žmogus.
Palikau CS pasaulį ;/ . Nebepasiekiamas.

User avatar
psychical
Viršininkas
Posts: 2094
Joined: 2011 Mar 12 22:19
Skype: tautvydas11
Location: Linksmakalnis
Contact:

Re: Keli klausimai [MYSQL]

Post by psychical »

Jo, pastebejau, taciau ta selektas tiesiog ziuri ar toks egzistuoja isvis DB, jei neegzistuoja sukuria, jei egzistuoja tai updatina, taciau taip, cia klaida :D

User avatar
aaarnas
Vyr. diskusijų administratorius
Posts: 3891
Joined: 2010 Aug 31 13:21
Skype: fiarno
Contact:

Re: Keli klausimai [MYSQL]

Post by aaarnas »

TAI tu patikrini ar yra tas įrašas ir PO TO updeitini visiškai bet kokį. Toks gali nė neegzistuoti. Tai tu pagal nick ir ieškok iš karto tada.
Palikau CS pasaulį ;/ . Nebepasiekiamas.

User avatar
psychical
Viršininkas
Posts: 2094
Joined: 2011 Mar 12 22:19
Skype: tautvydas11
Location: Linksmakalnis
Contact:

Re: Keli klausimai [MYSQL]

Post by psychical »

aaarnas wrote:TAI tu patikrini ar yra tas įrašas ir PO TO updeitini visiškai bet kokį. Toks gali nė neegzistuoti. Tai tu pagal nick ir ieškok iš karto tada.
Nu tai sakau, ten klaida :D

Post Reply

Who is online

Users browsing this forum: Bing [Bot] and 0 guests