Cześc, mój problem polega na tym, że zapis sql w ogóle nie działa lub jak już zadziała to mieszają się rekordy, że moge dostać zapis szlugow innego gracza... Nie wiem jak to jest możliwe, w 1 bazie mysql mam 5 tabel, a w nich różne zapisy od pluginów. A to od banku, szlugów, gangów itd...
Daję tu kod zapisu szlugów, może jak tu się dowiem o co chodzi to w pozostałych też to poprawie:
tak tworzę, tabele. Task jest ustawiony dlatego, że jak kilka pluginów mam, że tworzą tabele i się łączą z bazą danych to serwer się nie włącza
public plugin_cfg() { set_task(1.0, "Wczytaj", TASK_POBIERZ); } public Wczytaj(){ info = SQL_MakeDbTuple("xxx", "xxx", "ccc", "xxx"); new len_full, temp_full[2024]; len_full += formatex(temp_full[len_full], charsmax(temp_full)-len_full, "CREATE TABLE IF NOT EXISTS `szlugid` (`name` VARCHAR(48), `szlugi` FLOAT(10), PRIMARY KEY (`name`));)"); SQL_ThreadQuery(info, "ConnectSql_Handler", temp_full); remove_task(TASK_POBIERZ) }
public ConnectSql_Handler(failstate, Handle:query, error[], errnum, data[], size) { if(failstate != TQUERY_SUCCESS) { connected = false; return PLUGIN_CONTINUE; } connected = true; return PLUGIN_CONTINUE; }
public client_putinserver(id) { get_user_name(id, nazwa_gracza, 63) resetData(id); readData(id); } public client_disconnect(id) { saveData(id); resetData(id); } public resetData(id) { ilosc_jbpack[id] = 0.00 } public saveData(id) { if(!connected || is_user_bot(id) || is_user_hltv(id)) return PLUGIN_CONTINUE; new len_full, temp_full[2048]; mysql_escape_string(nazwa_gracza, charsmax(nazwa_gracza)); len_full += formatex(temp_full[len_full], charsmax(temp_full)-len_full, "UPDATE `szlugid` SET `szlugi` = '%.2f' WHERE `name` = ^"%s^";", ilosc_jbpack[id], nazwa_gracza); SQL_ThreadQuery(info, "saveDataHandler", temp_full); return PLUGIN_CONTINUE; } public saveDataHandler(failstate, Handle:query, error[], errnum, data[], size) { if(failstate != TQUERY_SUCCESS) { return PLUGIN_CONTINUE; } return PLUGIN_CONTINUE; } public readData(id) { if(!connected || is_user_bot(id) || is_user_hltv(id)) return PLUGIN_CONTINUE; new data[1], temp[2048], name[33]; data[0] = id; mysql_escape_string(name, charsmax(name)); formatex(temp, charsmax(temp), "SELECT * FROM `szlugid` WHERE `name` = '%s'", nazwa_gracza); SQL_ThreadQuery(info, "readDataHandler", temp, data, sizeof(data)); return PLUGIN_CONTINUE; } public readDataHandler(failstate, Handle:query, error[], errnum, data[], size) { new id = data[0]; if(failstate != TQUERY_SUCCESS) { log_amx("Error %s", error) return PLUGIN_CONTINUE; } new Float:ilosc_pre; if(SQL_MoreResults(query)) { SQL_ReadResult(query, 1, ilosc_pre) ilosc_jbpack[id] = ilosc_pre } else { new data[1]; data[0] = id; if(!connected || !is_user_connected(id) || is_user_bot(id) || is_user_hltv(id)) return PLUGIN_CONTINUE; new temp[2048]; mysql_escape_string(nazwa_gracza, charsmax(nazwa_gracza)); format(temp, charsmax(temp), "INSERT INTO `szlugid` (`name`, `szlugi`) VALUES ('%s', '0')", nazwa_gracza); SQL_ThreadQuery(info, "readDataHandler2", temp, data, sizeof(data)); return PLUGIN_CONTINUE; } return PLUGIN_CONTINUE; } public readDataHandler2(failstate, Handle:query, error[], errnum, data[], size) { if(failstate != TQUERY_SUCCESS) { log_amx("Wczytywanie dla %s blad %s", nazwa_gracza, error); return PLUGIN_CONTINUE; } return PLUGIN_CONTINUE; } stock mysql_escape_string(output[], len) { static const szReplaceIn[][] = { "\\", "\0", "\n", "\r", "\x1a", "'", "^"" }; static const szReplaceOut[][] = { "\\\\", "\\0", "\\n", "\\r", "\Z", "\'", "\^"" }; for(new i; i < sizeof szReplaceIn; i++) replace_all(output, len, szReplaceIn[i], szReplaceOut[i]); }
Nie wiem już sam o co chodzi, już trochę z tym się męczę. Z góry dzięki za pomoc
Użytkownik Black004 edytował ten post 03.08.2019 17:19