Executando querys
Agora, vou ensinar como executar
queries (consultas) no MySQL.
Talvez, você esteja lendo isso e não saiba o que é uma
query (haha), pior ainda, talvez nem saiba o que é MySQL.
Hoje em dia, é comum as pessoas tentarem aprender coisas avançadas, como por exemplo, explorar
buffer overflow, tentam aprender isso mas não sabem nem o que
é um
bit.
Se esse é seu caso, estude um pouco mais antes de continuar lendo o tutorial, se não, vamos continuar. :D
Para executar uma
query, primeiramente, iremos fazer a preparação, depois vem a execução, exemplo:
my $cmd = 'create database `mmxm`'; # Query que será executada
my $query = $con->prepare($cmd); # No preparo da query é que você manda o comando SQL!
$query->execute; # Executando a query!
if(not($DBI::errstr)){ # $query->errstr é equivalente a $DBI::errstr. Checando se erros aconteceram
print "Query '$cmd', executada com sucesso !\n";
} else {
print "ERRO: ".$query->errstr;
}
Execução:
perl query.pl
Query 'create database `mmxm`', executada com sucesso !
Verificando se o dabatase
mmxm foi realmente criado:
mysql -u root -ptoor -e 'show databases;'
+--------------------+
| Database |
+--------------------+
| information_schema |
| mmxm |
| mysql |
| perl |
+--------------------+
Obs.: erros podem ocorrer, caso o usuário não tenha permissões necessárias para criar Databases.
Exibindo o resultado de uma query
Já aprendemos como conectar-se ao banco de dados, verificar e identificar erros. Executar
queries, a única coisa que falta, para ficarmos "leetados" em Perl e MySQL
usando o modulo DBI, é exibir o resultado das
queries.
Na interface de linha de comando do MySQL, toda consulta que é feita retorna alguma informação, seja select, insert, update, show, create, etc.
Em Perl, para obtermos valores de uma
query do tipo select, podemos usar a função "
fetchrow_array", exemplo:
#!/usr/bin/perl -w
use strict;
use DBI;
use DBD::mysql;
my $host = 'localhost';
my $user = 'root';
my $password = 'toor';
my $db = 'mmxm';
my $info = "dbi:mysql:$db:$host:3306";
my $con = DBI->connect($info,$user,$password,{ PrintError => 0, RaiseError => 0 }) or die($DBI::errstr);
my $table = qq{ create table if not exists `tutorial` (
`id` int(10) unsigned not null auto_increment,
`mensagem` text COLLATE latin1_general_ci NOT NULL,
PRIMARY KEY (`id`)
);
};
my $query = $con->prepare($table);
$query->execute || die($DBI::errstr);
print "Tabela 'tutorial' criada !\n";
print "Inserindo valores dentro da tabela\n";
print "Digite alguma coisa: ";
chomp(my $value = <>);
my $insert = qq{ insert into `tutorial` values(NULL,"$value"); };
$query = $con->prepare($insert);
$query->execute || die($DBI::errstr);
print "Valor $value inserido na tabela 'tutorial' com sucesso !\n";
print "Obtendo valores inseridos na tabela ...\n\n";
sleep(1.3);
my @row;
my $select = "select * from tutorial";
$query = $con->prepare($select);
$query->execute || die($DBI::errstr);
while (@row = $query->fetchrow_array){
print "@row\n";
}
Executando:
perl mysql.pl
Tabela 'tutorial' criada !
Inserindo valores dentro da tabela
Digite alguma coisa: Perl is awesome
valor Perl is awesome inserido na tabela 'tutorial' com sucesso !
Obtendo valores inseridos na tabela ...
1 Perl is awesome
O valor "
Perl is awesome", foi inserido com sucesso na coluna mensagem, o número 1 é o ID da mensagem. Outra forma de obter dados usando select, é com a função
"
bind_columns", essa função vincula (bind) colunas da tabela para variáveis. No caso, você precisa conhecer bem a estrutura da tabela, para poder retirar da consulta
os valores que você quer.
Para saber a estrutura de uma coluna, você pode usar a
query:
mysql>
show columns from <tabela>
Aí, é só você usar a criatividade, pegar os nomes das colunas e cria um array que irá receber os valores, ou então, um hash (por exemplo).
Exemplo usando variáveis:
#!/usr/bin/perl -w
use strict;
use DBI;
use DBD::mysql;
my $host = 'localhost';
my $user = 'root';
my $password = 'toor';
my $db = 'mmxm';
my $info = "dbi:mysql:$db:$host:3306";
my $con = DBI->connect($info,$user,$password,{ PrintError => 0, RaiseError => 0 }) or die($DBI::errstr);
my $cmd = 'select * from tutorial';
my $query = $con->prepare($cmd);
$query->execute || die($DBI::errstr);
my($id,$mensagem);
$query->bind_columns(\$id, \$mensagem);
while($query->fetch()) {
print "ID: $id, Mensagem: $mensagem\n";
}
Execução:
perl select.pl
- ID: 1, Mensagem: Perl is awesome
- ID: 2, Mensagem: mmxm was here