conexão com o banco Perl
Neste capítulo, vamos apresentá-lo a conectar banco de dados Perl.
Perl 5, podemos usar o módulo DBI para se conectar ao banco de dados.
DBI Inglês nome: Base de dados de interface independente, chinês chamado interface independente de banco de dados.
Como DBI e o padrão de comunicação de interface de banco de dados a linguagem Perl, que define um conjunto de métodos, variáveis e constantes, e fornecer uma camada de persistência de banco de dados específico de banco de dados independente de plataforma.
estrutura DBI
DBI e em particular do banco de dados independente de plataforma, podemos aplicá-lo na Oracle, MySQL ou Informix, e outros bancos de dados.
Obter tudo o gráfico DBI API (Application Programming Interface: Interface de Programação de Aplicativos) enviada a partir de dados SQL, e depois distribuídos para o driver correspondente sobre a execução, e, finalmente, obter os dados de volta.
convenções nome da variável
O seguinte conjunto de o nome mais comum da nomenclatura de variáveis:
$dsn 驱动程序对象的句柄 $dbh 一个数据库对象的句柄 $sth 一个语句或者一个查询对象的句柄 $h 通用的句柄 ($dbh, $sth, 或 $drh),依赖于上下文 $rc 操作代码返回的布什值(true 或 false) $rv 操作代码返回的整数值 @ary 查询返回的一行值的数组(列表) $rows 操作代码返回的行数值 $fh 文件句柄 undef NULL 值表示未定义 \%attr 引用属性的哈希值并传到方法上
Database Connectivity
Em seguida, demonstramos Perl com banco de dados MySQL como um exemplo de como as operações de banco de dados.
Aqui criamos um banco de dados MySQL sites da tabela de banco de dados de dados w3big, a estrutura da tabela e os dados são mostrados abaixo:
Baixe a ficha produto: http://static.w3big.com/download/websites_perl.sql
Em seguida, usamos o seguinte código para se conectar ao banco de dados:
#!/usr/bin/perl -w use strict; use DBI; my $host = "localhost"; # 主机地址 my $driver = "mysql"; # 接口类型 默认为 localhost my $database = "w3big"; # 数据库 # 驱动程序对象的句柄 my $dsn = "DBI:$driver:database=$database:$host"; my $userid = "root"; # 数据库用户名 my $password = "123456"; # 数据库密码 # 连接数据库 my $dbh = DBI->connect($dsn, $userid, $password ) or die $DBI::errstr; my $sth = $dbh->prepare("SELECT * FROM Websites"); # 预处理 SQL 语句 $sth->execute(); # 执行 SQL 操作 # 注释这部分使用的是绑定值操作 # $alexa = 20; # my $sth = $dbh->prepare("SELECT name, url # FROM Websites # WHERE alexa > ?"); # $sth->execute( $alexa ) or die $DBI::errstr; # 循环输出所有数据 while ( my @row = $sth->fetchrow_array() ) { print join('\t', @row)."\n"; } $sth->finish(); $dbh->disconnect();
Inserir
passos:
- Use prepare () API preparado instruções SQL.
- Use API execute () para executar instruções SQL.
- Use acabamento API () para liberar o identificador de instrução.
- Finalmente, se tudo correr bem, será apresentado ao longo da operação.
my $sth = $dbh->prepare("INSERT INTO Websites (name, url, alexa, conutry ) values ('Twitter', 'https://twitter.com/', 10, 'USA')"); $sth->execute() or die $DBI::errstr; $sth->finish(); $dbh->commit or die $DBI::errstr;
A aplicação também pode vincular parâmetros de entrada e de saída, seguindo o exemplo substituindo espaços reservados variáveis para executar uma consulta de inserção ?:
my $name = "Twitter"; my $url = "https://twitter.com/"; my $alexa = 10; my $conutry = "USA"; my $sth = $dbh->prepare("INSERT INTO Websites (name, url, alexa, conutry ) values (?,?,?,?)"); $sth->execute($name,$url,$alexa, $conutry) or die $DBI::errstr; $sth->finish(); $dbh->commit or die $DBI::errstr;
operação de actualização
passos:
- Use prepare () API preparado instruções SQL.
- Use API execute () para executar instruções SQL.
- Use acabamento API () para liberar o identificador de instrução.
- Finalmente, se tudo correr bem, será apresentado ao longo da operação.
my $sth = $dbh->prepare("UPDATE Websites SET alexa = alexa + 1 WHERE country = 'CN'"); $sth->execute() or die $DBI::errstr; print "更新的记录数 :" + $sth->rows; $sth->finish(); $dbh->commit or die $DBI::errstr;
A aplicação também pode vincular parâmetros de entrada e de saída, seguindo o exemplo substituindo espaços reservados variáveis para executar uma consulta de actualização ?:
$name = '本教程'; my $sth = $dbh->prepare("UPDATE Websites SET alexa = alexa + 1 WHERE name = ?"); $sth->execute('$name') or die $DBI::errstr; print "更新的记录数 :" + $sth->rows; $sth->finish();
Claro, nós também pode vincular valor a ser definido da seguinte maneira para o país terá que modificar o Alexa CN 1000:
$country = 'CN'; $alexa = 1000:; my $sth = $dbh->prepare("UPDATE Websites SET alexa = ? WHERE country = ?"); $sth->execute( $alexa, '$country') or die $DBI::errstr; print "更新的记录数 :" + $sth->rows; $sth->finish();
excluir dados
passos:
- Use prepare () API preparado instruções SQL.
- Use API execute () para executar instruções SQL.
- Use acabamento API () para liberar o identificador de instrução.
- Finalmente, se tudo correr bem, será apresentado ao longo da operação.
Os dados a seguir sites nos dados Alexa é maior que 1000 são excluídos:
$alexa = 1000; my $sth = $dbh->prepare("DELETE FROM Websites WHERE alexa = ?"); $sth->execute( $alexa ) or die $DBI::errstr; print "删除的记录数 :" + $sth->rows; $sth->finish(); $dbh->commit or die $DBI::errstr;
Use fazer declaração
não declarações pode executar UPDATE, INSERT, ou DELETE operação, ele é bastante curta, a execução bem-sucedida retorna verdadeiro, falhar, ele retorna false, os exemplos são os seguintes:
$dbh->do('DELETE FROM Websites WHERE alexa>1000');
COMMIT operação
comprometer-se a confirmar a transação para completar a operação do banco de dados:
$dbh->commit or die $dbh->errstr;
operação de reversão
Se ocorrer um erro durante a execução de SQL, você pode reverter os dados sem qualquer alteração:
$dbh->rollback or die $dbh->errstr;
negócios
E outras línguas, perl operação DBI do banco de dados também suporta o processamento de transações, existem duas maneiras de conseguir isso:
1, em conexão com o banco de dados quando começou uma transação
$dbh = DBI->connect($dsn, $userid, $password, {AutoCommit => 0}) or die $DBI::errstr;
O código acima no momento da conexão definido AutoCommit é falsa, isto é, quando você atualizar a operação de banco de dados, ele não atualiza automaticamente os escritos diretamente para o banco de dados, mas para o programa de US $ dbh-> comprometer-se a para que os dados gravados na base de dados, ou US $ dbh-> reversão para reverter a operação.
2, em US $ dbh-> begin_work () declaração para iniciar uma transação
Desta forma, não há necessidade de definir AutoCommit = 0 no tempo de conexão banco de dados.
Você pode conectar uma operação de transação de banco de dados várias vezes, não todas as transações estão começando a se conectar a um banco de dados.
$rc = $dbh->begin_work or die $dbh->errstr; ##################### ##这里执行一些 SQL 操作 ##################### $dbh->commit; # 成功后操作 ----------------------------- $dbh->rollback; # 失败后回滚
Desligue a ligação do banco de dados
Se necessário desconectar do banco de dados, você pode usar a API de desconexão:
$rc = $dbh->disconnect or warn $dbh->errstr;