Latest web development tutorials

Perl-Datenbankverbindung

In diesem Kapitel werden wir Ihnen vorstellen Perl-Datenbank zu verbinden.

Perl 5, können wir das DBI-Modul verwenden, um die Datenbank zu verbinden.

DBI englischen Namen: Datenbank Independent Interface, genannt chinesischen Datenbank-unabhängige Schnittstelle.

Als DBI und der Datenbank-Schnittstelle Kommunikationsstandard Perl Sprache, die eine Reihe von Methoden, Variablen und Konstanten definiert, und bieten eine spezifische Datenbank plattformunabhängige Datenbank Persistenz-Schicht.


DBI-Struktur

DBI und bestimmte Datenbank plattformunabhängig, können wir es in Oracle, MySQL oder Informix und anderen Datenbanken gelten.

Holen Sie sich alle Chart-DBI-API (Application Programming Interface: Application Programming Interface) von SQL-Daten gesendet und dann über die Umsetzung zu dem entsprechenden Treiber verteilt, und schließlich die Daten zurück.

Variable Namenskonventionen

Der folgende Satz der häufigsten Namen der Variablennamen:

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

Database Connectivity

Als nächstes wir Perl mit MySQL-Datenbank als ein Beispiel dafür, wie die Datenbankoperationen zu demonstrieren.

Hier erstellen wir eine Datenbank in MySQL-Datenbank w3big Datentabelle Webseiten, Tabellenstruktur und Daten ist unten dargestellt:

Laden Sie sich das Datenblatt: http://static.w3big.com/download/websites_perl.sql

Als nächstes benutzen wir den folgenden Code in der Datenbank zu verbinden:

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

Insert

Schritte:

  • Verwenden Sie vorbereiten () API SQL-Anweisungen vorbereitet.
  • Verwenden Sie execute () API SQL-Anweisungen auszuführen.
  • Verwenden Sie Finish () API die Anweisung Griff zu lösen.
  • Schließlich, wenn alles gut geht es über den Betrieb abgegeben werden.
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;

Die Anwendung kann auch Ein- und Ausgangsparameter zu binden, nach dem Beispiel durch variable Platzhalter eingesetzt werden, einen Einsatz Abfrage auszuführen ?:

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;

Update-Betrieb

Schritte:

  • Verwenden Sie vorbereiten () API SQL-Anweisungen vorbereitet.
  • Verwenden Sie execute () API SQL-Anweisungen auszuführen.
  • Verwenden Sie Finish () API die Anweisung Griff zu lösen.
  • Schließlich, wenn alles gut geht es über den Betrieb abgegeben werden.
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;

Die Anwendung kann auch Ein- und Ausgangsparameter zu binden, nach dem Beispiel durch variable Platzhalter eingesetzt werden, eine Aktualisierungsabfrage ausführen ?:

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

Natürlich können wir auch wie folgt festgelegt werden binden Wert für das Land 1000 die CN alexa ändern müssen:

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

Daten löschen

Schritte:

  • Verwenden Sie vorbereiten () API SQL-Anweisungen vorbereitet.
  • Verwenden Sie execute () API SQL-Anweisungen auszuführen.
  • Verwenden Sie Finish () API die Anweisung Griff zu lösen.
  • Schließlich, wenn alles gut geht es über den Betrieb abgegeben werden.

Die folgenden Daten werden Websites in der alexa Daten größer als 1000 werden gestrichen:

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

Verwenden Sie Erklärung

Sie Anweisungen können UPDATE, INSERT, ausführen oder DELETE - Operation ist er ziemlich kurz, die erfolgreiche Ausführung true zurückgibt, schlägt fehl , es gibt false zurück, Beispiele sind wie folgt:

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

COMMIT Betrieb

verpflichten, die Transaktion zu verpflichten, den Betrieb der Datenbank zu vervollständigen:

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

ROLLBACK-Operation

Wenn ein Fehler bei der Ausführung von SQL auftritt, können Sie die Daten ohne Änderung rückgängig zu machen:

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

Angelegenheiten

Und andere Sprachen Perl DBI Betrieb der Datenbank unterstützt auch die Transaktionsverarbeitung, gibt es zwei Möglichkeiten, es zu erreichen:

1, in Verbindung mit der Datenbank, wenn es begann eine Transaktion

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

Der obige Code zum Zeitpunkt der Verbindung gesetzt AutoCommit ist falsch, das heißt, wenn Sie die Datenbankoperation zu aktualisieren, ist es nicht automatisch diejenigen, die direkt in die Datenbank geschrieben aktualisieren, sondern um das Programm von $ dbh-> verpflichten so dass die Daten in die Datenbank tatsächlich geschrieben, oder $ dbh-> Rollback um den Vorgang rückgängig zu machen.

2, $ dbh-> begin_work () Anweisung, um eine Transaktion zu starten

Auf diese Weise gibt es keine Notwendigkeit AutoCommit = 0 in der Datenbankverbindung Zeit einzustellen.

Sie können eine Datenbanktransaktion mehrere Male zu verbinden, nicht jede Transaktion mit einer Datenbank zu verbinden beginnen.

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

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

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

Trennen Sie die Datenbankverbindung

Wenn wir von der Datenbank trennen müssen, können Sie die Trenn API verwenden:

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