Latest web development tutorials

connessione al database Perl

In questo capitolo vi presentiamo per la connessione di database Perl.

Perl 5, siamo in grado di utilizzare il modulo DBI per la connessione al database.

Nome DBI inglese: Database Independent Interface, cinese chiamato un'interfaccia indipendente dal database.

Come DBI e lo standard di comunicazione interfaccia di database linguaggio Perl, che definisce una serie di metodi, variabili e costanti, e di fornire una piattaforma indipendente dal livello di database di persistenza database specifico.


struttura DBI

banca dati DBI e particolare indipendente dalla piattaforma, siamo in grado di applicarlo in Oracle, MySQL o Informix, e altri database.

Ottenere tutte le chart DBI API (Application Programming Interface: Application Programming Interface) inviato da dati SQL, e poi distribuiti al driver corrispondente sull'attuazione, e, infine, ottenere i dati indietro.

convenzioni Nome variabile

La seguente serie del nome più comune della denominazione variabili:

$dsn    驱动程序对象的句柄
$dbh    一个数据库对象的句柄
$sth    一个语句或者一个查询对象的句柄
$h      通用的句柄 ($dbh, $sth, 或 $drh),依赖于上下文
$rc     操作代码返回的布什值(true 或 false)
$rv     操作代码返回的整数值
@ary    查询返回的一行值的数组(列表)
$rows   操作代码返回的行数值
$fh     文件句柄
undef   NULL 值表示未定义
\%attr  引用属性的哈希值并传到方法上

Database Connectivity

Successivamente, dimostriamo Perl con il database MySQL come un esempio di come le operazioni di database.

Qui creiamo un database in MySQL sito web tabella del database dei dati w3big, struttura della tabella e dei dati è la seguente:

Scarica la scheda prodotto: http://static.w3big.com/download/websites_perl.sql

Poi si usa il seguente codice per la connessione al database:

#!/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();

Inserire

passi:

  • Utilizzare preparare () API preparato istruzioni SQL.
  • Utilizzare execute () API per eseguire istruzioni SQL.
  • Utilizzare finitura) API (per rilasciare l'handle di istruzione.
  • Infine, se tutto va bene sarà presentato nel corso dell'operazione.
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;

L'applicazione può anche legare i parametri di ingresso e di uscita, seguendo l'esempio sostituendo i segnaposto variabili per eseguire una query di inserimento ?:

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;

operazione di aggiornamento

passi:

  • Utilizzare preparare () API preparato istruzioni SQL.
  • Utilizzare execute () API per eseguire istruzioni SQL.
  • Utilizzare finitura) API (per rilasciare l'handle di istruzione.
  • Infine, se tutto va bene sarà presentato nel corso dell'operazione.
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;

L'applicazione può anche legare i parametri di ingresso e di uscita, seguendo l'esempio sostituendo i segnaposto variabili per eseguire una query di aggiornamento ?:

$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();

Naturalmente, possiamo anche legare valore da impostare come segue per il paese dovrà modificare la 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();

cancellare i dati

passi:

  • Utilizzare preparare () API preparato istruzioni SQL.
  • Utilizzare execute () API per eseguire istruzioni SQL.
  • Utilizzare finitura) API (per rilasciare l'handle di istruzione.
  • Infine, se tutto va bene sarà presentato nel corso dell'operazione.

I seguenti dati saranno i siti web in dati di Alexa è maggiore di 1000 sono cancellati:

$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;

Usa do istruzione

fanno dichiarazioni possono eseguire UPDATE, INSERT o DELETE, egli è piuttosto breve, esecuzione di successo restituisce true, non restituisce false, gli esempi sono i seguenti:

$dbh->do('DELETE FROM Websites WHERE alexa>1000');

COMMIT operazione

impegnarsi a commit della transazione per completare l'operazione di database:

$dbh->commit or die $dbh->errstr;

operazione di rollback

Se si verifica un errore durante l'esecuzione di SQL, è possibile ripristinare i dati senza alcuna modifica:

$dbh->rollback or die $dbh->errstr;

affari

E altri linguaggi, Perl funzionamento DBI del database supporta anche l'elaborazione delle transazioni, ci sono due modi per realizzarlo:

1, in connessione al database quando ha iniziato una transazione

$dbh = DBI->connect($dsn, $userid, $password, {AutoCommit => 0}) or die $DBI::errstr;

Il codice di cui sopra, al momento della connessione impostata AutoCommit è falso, cioè, quando si aggiorna l'operazione di database, non aggiorna automaticamente quelle scritte direttamente al database, ma per il programma da $ dbh-> impegnano a in modo che i dati effettivamente scritti nel database, o $ dbh-> rollback a rotolare di nuovo l'operazione.

2, di $ dbh-> begin_work () per avviare una transazione

In questo modo non è necessario impostare AutoCommit = 0 nel tempo di connessione database.

È possibile collegare una operazione di transazione di database più volte, non ogni transazione stanno cominciando a connettersi a un database.

$rc  = $dbh->begin_work  or die $dbh->errstr;

#####################
##这里执行一些 SQL 操作
#####################

$dbh->commit;    # 成功后操作
-----------------------------
$dbh->rollback;  # 失败后回滚

Staccare la connessione al database

Se abbiamo bisogno di staccare dal database, è possibile utilizzare l'API di disconnessione:

$rc = $dbh->disconnect  or warn $dbh->errstr;