Resumo : neste tutorial, mostraremos como consultar dados de tabelas de banco de dados MySQL usando Perl DBI.
Para consultar dados das tabelas do banco de dados MySQL do programa Perl, você usa as seguintes etapas:
- Conecte-se ao banco de dados MySQL chamando o
connect()
método. - Prepare uma
SELECT
instrução para execução usando oprepare()
método do objeto identificador do banco de dados. Oprepare()
método retorna um objeto identificador de instrução que representa uma instrução no banco de dados MySQL. - Execute a
SELECT
instrução chamando oexecute()
método do objeto identificador da instrução. - Chame
fetchrow_array()
ou método para buscar dados do conjunto de resultados até que não haja mais nenhuma linhafetchrow_arrayref()
.fetchrow_hashref()
Você pode usar awhile
instrução para iterar o conjunto de resultados. - Desconecte-se do banco de dados MySQL.
Exemplos de SELECT Perl MySQL
Usaremos as seguintes tabelas para os exemplos:
Se você ainda não criou as tabelas, recomendamos fortemente que você as crie seguindo o tutorial de criação de tabelas .
Consultando dados de um exemplo de tabela
O exemplo a seguir seleciona dados da links
tabela:
#!/usr/bin/perl
use strict;
use warnings;
use v5.10; # for say() function
use DBI;
# MySQL database configurations
my $dsn = "DBI:mysql:perlmysqldb";
my $username = "root";
my $password = '';
# connect to MySQL database
my %attr = ( PrintError=>0, # turn off error reporting via warn()
RaiseError=>1 # report error via die()
);
my $dbh = DBI->connect($dsn,$username,$password,\%attr);
# query data from the links table
query_links($dbh);
# disconnect from the MySQL database
$dbh->disconnect();
Linguagem de código: Perl ( perl )
A lógica principal é implementada na query_links
sub-rotina:
sub query_links{
# query from the links table
my ($dbh) = @_;
my $sql = "SELECT title,
url
FROM links";
my $sth = $dbh->prepare($sql);
# execute the query
$sth->execute();
while(my @row = $sth->fetchrow_array()){
printf("%s\t%s\n",$row[0],$row[1]);
}
$sth->finish();
}
Linguagem de código: Perl ( perl )
A saída do script é a seguinte:
MySQL Tutorial http://tutorials.acervolima.com/
Perl MySQL Insert Demo https://tutorials.acervolima.com/perl-mysql/perl-mysql-insert/
Perl http://www.perl.org
MySQL http://www.mysql.com
Comprehensive Perl Archive Network http://www.cpan.org/
Linguagem de código: JavaScript ( javascript )
Consultando dados de uma tabela com exemplo de parâmetro
Freqüentemente passamos os valores para a consulta para selecionar dados com base na condição. O exemplo a seguir consulta dados dos links
destinos especificados na links
tabela:
sub query_links_by_target{
# query from the links table by target
my ($dbh,$target) = @_;
my $sql = "SELECT title,url,target
FROM links
WHERE target = ?";
my $sth = $dbh->prepare($sql);
# execute the query
$sth->execute($target);
while(my @row = $sth->fetchrow_array()){
printf("%s\t%s\n",$row[0],$row[1],$row[3]);
}
$sth->finish();
}
Linguagem de código: Perl ( perl )
Colocamos um ponto de interrogação como espaço reservado na cláusula WHERE da SELECT
instrução. O placeholder será substituído pelo valor que passamos para o execute()
método.
Por exemplo, para selecionar links cujo destino é _self
, você chama a sub-rotina da seguinte forma:
query_links_by_target($dbh,'_self');
Linguagem de código: Perl ( perl )
A saída é:
MySQL Tutorial http://tutorials.acervolima.com/ _self
MySQL http://www.mysql.com _self
Linguagem de código: JavaScript ( javascript )
Ou para selecionar links cujo alvo seja _blank
, você passa o valor para a query_links_by_target()
sub-rotina da seguinte forma:
query_links_by_target($dbh,'_blank');
Linguagem de código: Perl ( perl )
A saída é:
Perl MySQL Insert Demo https://tutorials.acervolima.com/perl-mysql/perl-mysql-insert/ _blank
Perl http://www.perl.org _blank
Comprehensive Perl Archive Network http://www.cpan.org/ _blank
Linguagem de código: JavaScript ( javascript )
Consultando dados e despejando o conjunto de resultados
O objeto handle de instrução fornece um método conveniente nomeado dump_results()
para exibir o conjunto de resultados rapidamente sem chamar os fetchrow_*
métodos.
O exemplo a seguir seleciona dados da tags
tabela e faz dump do conjunto de resultados usando o dump_results()
método:
sub query_tags{
# query data from the tags table
my ($dbh) = @_;
my $sql = "SELECT * FROM tags";
my $sth = $dbh->prepare($sql);
$sth->execute();
$sth->dump_results( );
$sth->finish();
}
Linguagem de código: Perl ( perl )
A saída é:
'1', 'Perl'
1 rows
Linguagem de código: JavaScript ( javascript )
Consultando dados de várias tabelas
O script a seguir seleciona dados de três tabelas: links
e tags
tabelas link_tags
usando uma SELECT
instrução com cláusulas INNER JOIN .
sub query_all{
# query data from links, tags, link_tags tables
my ($dbh) = @_;
my $sql = "SELECT title, url, target,tag
FROM link_tags
INNER JOIN links ON links.link_id = link_tags.link_id
INNER JOIN tags ON tags.tag_id = link_tags.tag_id";
my $sth = $dbh->prepare($sql);
$sth->execute();
while(my $array_ref = $sth->fetchrow_arrayref()){
printf("%s\t%s\t%s\t%s\n", $array_ref->[0],
$array_ref->[1],
$array_ref->[2],
$array_ref->[3]);
}
$sth->finish();
}
Linguagem de código: Perl ( perl )
Neste exemplo, usamos o fetchrow_arrayref()
método para buscar dados do conjunto de resultados. O fetchrow_arrayref()
método retorna uma referência a um array em vez de um array em si. O fetchrow_arrayref()
método não copia dados em um novo array para cada linha no conjunto de resultados como o fetchrow_array()
método, portanto, é mais rápido que o fetchrow_array()
método.
A seguir está a saída do script:
Comprehensive Perl Archive Network http://www.cpan.org/ _blank Perl
Linguagem de código: JavaScript ( javascript )
Obtivemos 1 linha porque há apenas uma linha na link_tags
tabela.
Neste tutorial, você aprendeu várias maneiras de consultar dados das tabelas do banco de dados MySQL usando a API Perl DBI.