Latest web development tutorials

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;