Page 1 of 1

Keli klausimai [MYSQL]

Posted: 2011 Jun 13 21:18
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

Re: Keli klausimai [MYSQL]

Posted: 2011 Jun 13 22:04
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.

Re: Keli klausimai [MYSQL]

Posted: 2011 Jun 13 22:21
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(); 
?

Re: Keli klausimai [MYSQL]

Posted: 2011 Jun 13 22:25
by aaarnas
mySQLConnect(); į plugins_init()

close_mysql() į plugin_end()

Visur kitur juos ištrink.

Re: Keli klausimai [MYSQL]

Posted: 2011 Jun 13 22:37
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

Re: Keli klausimai [MYSQL]

Posted: 2011 Jun 13 22:50
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.

Re: Keli klausimai [MYSQL]

Posted: 2011 Jun 13 22:55
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

Re: Keli klausimai [MYSQL]

Posted: 2011 Jun 13 23:16
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.

Re: Keli klausimai [MYSQL]

Posted: 2011 Jun 13 23:17
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