Como executar vбrias instruções em uma mesma query MySQL
HistoriaEstava pesquisando sobre algumas coisas no forum e encontrei um tуpico perguntando como executar mais de uma instruзгo em uma ъnica query. Nгo era meu objetivo encontrar uma resposta para essa pergunta, mas algum tempo depois vi algo que chamou minha atenзгo e poderia resolver esse problema. Esse pequeno tutorial vai explicar como fazer isso, e espero que sirva para alguйm.
Let's get start it
Para você poder finalmente fazer uma query com mais de uma instruзгo, precisa executar alguns simples passos.
Talvez vocк nгo tenha percebido, mas o mysql_connect tem um parametro opcional chamado option_id e essa é a estrela desse tutorial.
Primeiro deve-se criar uma instвncia de opзхes para coneзгo MySQL dessa forma:
- Código:
public OnGamemodeInit()
{
new MySQLOpt:mysql_opcoes = mysql_init_options();
}
E a partir dar pode-se utilizar a funзгo
- Código:
mysql_set_options(MySQLOpt:option_id, E_MYSQL_OPTION:type, ...)
para definir as opções abaixo na conexгo mysql.
(Fonte:sampwiki)
*Vou utilizar a opзгo MULTI_STATEMENTS e AUTO_RECONNECT para o tutorial, se quiser utilizar as outras fique a vontade.
Setar MULTI_STATEMENTS como true, permitirб que vocк execute mais de uma instruзгo na mesma consulta, e o AUTO_RECONNECT faz com que o plugin MySQL tente se reconectar caso a conexгo caia por algum motivo.
- Código:
public OnGamemodeInit()
{
new MySQLOpt:mysql_opcoes = mysql_init_options();
mysql_set_option(mysql_options, AUTO_RECONNECT, true);
mysql_set_option(mysql_options, MULTI_STATEMENTS, true);
}
Essas configurações devem, por fim, serem utilizadas na conexгo com o banco de dados como ъltimo parametro.
- Código:
new MySQL:handler;
public OnGamemodeInit()
{
new MySQLOpt:mysql_opcoes = mysql_init_options();
mysql_set_option(mysql_opcoes, AUTO_RECONNECT, true);
mysql_set_option(mysql_opcoes, MULTI_STATEMENTS, true);
handler = mysql_connect(MySQL_HOST, MySQLSQL_USER, MySQLSQL_PASS, MySQLSQL_DB,mysql_opcoes);
}
Como fazer a query agora?
É preciso tomar cuidado com apenas uma coisa: O tirano do ;
Imaginemos uma tabela chamada `players` que tem as colunas nick e senha. Para inserir dois, trкs whatever novos jogadores nessa tabela, deve-se colocar ponto e virgula para separar as instruзхes, exceto na ultima.
- Código:
mysql_query(handler,
"INSERT INTO `players` (`nick`,senha) VALUES ('Jгo','54FD89SDFS21SD8');
INSERT INTO `players` (`nick`,senha) VALUES ('Ramon','@321654@334s');
INSERT INTO `players` (`nick`,senha) VALUES ('Calisto','senha123');
INSERT INTO `players` (`nick`,senha) VALUES ('Rosvenal','password')
"
);
É claro que normalmente isso nгo aconteceria em um cуdigo, mas pode ser ъtil para criar um registro na tabela `bans` e dar UPDATE na tabela `players` na mesma consulta.
Caso alguém use mysql_connect_file tambйm é possнvel setar o MULTI_STATEMENTS, porйm isso é feito no proprio arquivo.
Caso tenha alguma sugestгo ou crнtica fique a vontade para comentar.
Creditos: augustogdo