LG 1 #1 Posted October 4, 2009 (edited) SQL Hoje vamos aprender como utilizar sql em servidores de tibia. Vamos começar aprendendo a selecionar um valor. query << "SELECT `id`, `name`, `password`, `premdays`, `lastday`, `key`, `warnings` FROM `accounts` WHERE `id` = " << accId << " LIMIT 1"; DBResult* result; if(!(result = db->storeQuery(query.str()))) return acc; acc.number = result->getDataInt("id"); acc.name = result->getDataString("name"); acc.password = result->getDataString("password"); acc.premiumDays = result->getDataInt("premdays"); acc.lastDay = result->getDataInt("lastday"); acc.recoveryKey = result->getDataString("key"); acc.warnings = result->getDataInt("warnings"); Não é muito complicado de entender que a palavra SELECT ira selecionar algum valor, neste caso vai selecionar id, name, password, premdays, lastday, key, warnings porem é preciso dizer em que tabela o programa ira pegar estes valores por isso usamos o FROM que neste caso ira abrir a tabela accounts. FROM `accounts`O programa irá abrir a tabela mas para ele saber onde esta estes valores dentro da tabela ele vai usar WHERE. WHERE `id` = " << accId << " Esta linha faz com que o programa procure na tabela o id que tem o valor de accId.Pronto agora o programa fez a consulta porem para usarmos este valor será necessário atribuir o valor da consulta a uma variável: acc.password = result->getDataString("password"); A variável 'acc.password' tem o valor do resultado da consulta de 'password'. Agora para usar este valor no seu programa é só utilizar da variável 'acc.password'. Vou mostrar uma consulta: Database* db = Database::getInstance(); DBQuery query; query << "SELECT `premdays` FROM `accounts` WHERE `id` = " << accId << " LIMIT 1"; DBResult* result; if(!(result = db->storeQuery(query.str()))) acc.premmy = result->getDataInt("premdays");if (acc.premmy > 0){return true;elsereturn false;} ================================ Agora vamos aprender a fazer update de valores: query << "UPDATE `accounts` SET `password` = " << db->escapeString(newPassword) << " WHERE `id` = " << accountId << db->getUpdateLimiter(); Não é muito dificil de entender, UPDATE `accounts` irá da update na tabela accounts. Neste caso será mudado o valor de password SET `password` = Porem como no caso de select o programa tem que saber onde está na tabela a coluna pasword, para isso usamos o WHERE que neste caso é o id do jogador. WHERE `id` = " << accountId << db->getUpdateLimiter();pronto o valor de password será trocado, irei mostrar um exemplo. if (acc == true){return false}else{"UPDATE `accounts` SET `name` = " << db->escapeString(newname) << " WHERE `id` = " << accountId << db->getUpdateLimiter();} ================================ Vamos ver como deletar algum valor. query << "DELETE FROM `player_depotitems` WHERE `player_id` = " << player->getGUID(); Para deletar um valor é nesseçario dizer aonde está o valor que será deletado. DELETE FROM `player_depotitems`esta linha de codigo quer dizer que será deletado um valor que esta dentro da tabela player_depotitems.Para dizer onde está o valor que irá ser deletado usamos o WHERE. WHERE `player_id` = " << player->getGUID();Com este codigo será deletado um item no depot do player.olha o exemplo. query << "DELETE FROM `guild_invites` WHERE `guild_id` = " << guildId; ================================ Por fim irei mostrar como inserir um valor em uma coluna. query << "INSERT INTO `server_motd` (`id`, `world_id`, `text`) VALUES (" << ++lastMotdNum << ", " << g_config.getNumber(ConfigManager::WORLD_ID) << ", " << db->escapeString(lastMotdText) << ")"; Este para inserir um valor você tem que primeiro dizer em que coluca ele está neste caso está dentro de server_motd. INSERT INTO `server_motd` Temos que mostrar onde queremos inserir o valor dentro da tabela, (`id`, `world_id`, `text`) E para dar o valor que será inserido usamos VALUES. VALUES (" << ++lastMotdNum << ", " << g_config.getNumber(ConfigManager::WORLD_ID) << ", " << db->escapeString(lastMotdText) << ")"; Vou mostrar um exemplo simples: query << "INSERT INTO `accounts` (`id`) VALUES (NULL, " << db->escapeString(name) <<"; Edited October 6, 2009 by LG Share this post Link to post Share on other sites
Eventide 7 #2 Posted October 6, 2009 tópico aprovado e movido. dica: revize as virgulas e as tags [.code] Share this post Link to post Share on other sites
Mock 32 #3 Posted October 7, 2009 otimo tutorial, nao esta impecavel mais nao esta ruim. so queria saber qual a lib que usa :S #incluide <...?.h> eu sei que é de otserv eu queria saber qual a lib que usam. Share this post Link to post Share on other sites
Pynh 0 #4 Posted October 7, 2009 Nossa tutorial muito bom, esclareceu muitas duvidas que eu tinha... como a parte de pegar o valor da coluna e colocar na variavel. acc.number = result->getDataInt("id"); em minha opnião deveria ser fixado. Share this post Link to post Share on other sites
LG 1 #5 Posted October 7, 2009 otimo tutorial, nao esta impecavel mais nao esta ruim.so queria saber qual a lib que usa :S eu sei que é de otserv eu queria saber qual a lib que usam. é realmente não está otimo vou rever alguns pontos. A lib depende da database como otserv normalmente usa mysql ou sqlite vou falar dos 2. Mysql #include <mysql/mysql.h> ou #include <mysql.h> sqlite #include <sqlite3.h> Share this post Link to post Share on other sites
gabrielfilipinho 0 #6 Posted October 9, 2009 oOOO Que Tuto mara vei parabens O Tutorial ta de mais Share this post Link to post Share on other sites
LG 1 #7 Posted October 9, 2009 oOOOQue Tuto mara vei parabens O Tutorial ta de mais Obrigado, qualquer duvida só falar... Share this post Link to post Share on other sites
Dark Maker 0 #8 Posted October 9, 2009 è bom cara mais nao entendi como é o update de valores (Sei que é uma duvida besta) Share this post Link to post Share on other sites
LG 1 #9 Posted October 10, 2009 è bom cara mais nao entendi como é o update de valores (Sei que é uma duvida besta) Vou te dar um exemplo: O serrvidor vai dar save e vai salvar o skill do jogador query << "UPDATE `[url="http://localhost/phpmyadmin/sql.php?db=fulltera&token=91d12363158a032923ff1ed5f7a66d01&table=player_skills&pos=0"]player_skills[/url]` SET `value` = "skill" WHERE `id` = "playerid"; update é usado para atualizar um valor. Share this post Link to post Share on other sites
Dark Maker 0 #10 Posted October 10, 2009 Ah tá, vlw '-' Share this post Link to post Share on other sites
Eventide 7 #11 Posted October 11, 2009 na verdade a instancia do banco de dados é independente do tipo usado, portanto de o include em database.h, mas se der em qualquer outro vai dar na mesma, pois mysql.h e etc tem heranças com database.h Share this post Link to post Share on other sites
LG 1 #12 Posted October 11, 2009 na verdade a instancia do banco de dados é independente do tipo usado, portanto de o include em database.h, mas se der em qualquer outro vai dar na mesma, pois mysql.h e etc tem heranças com database.h Realmente se você incluir database.h vai dar no mesmo, porem entendi a pergunta, como usar o mysql ou sqlite sem incluir database.h. Share this post Link to post Share on other sites
patrickdelfim 0 #13 Posted October 15, 2009 Adorei Lg Manja Muito Dessas Coisas ^^ Share this post Link to post Share on other sites
Sorcerer of luz 0 #14 Posted November 10, 2009 O.o, acho que não consigo usar sql. Share this post Link to post Share on other sites
Lord' Raynex 0 #15 Posted November 11, 2009 Maneiro cara, Tutorial ta e, obrigado por compartilha-lo conosco e que você continue fazendo város Tutoriais como este... Abraços Share this post Link to post Share on other sites