Latest web development tutorials

połączenia z bazą danych Perl

W tym rozdziale będziemy wprowadzać do łączenia bazy danych Perl.

Perl 5, możemy użyć modułu DBI, aby połączyć się z bazą danych.

Nazwa DBI English: Baza Independent Interface, chiński nazywany interfejs bazodanowy niezależny.

Jak DBI i standardu komunikacji interfejsu bazie języka Perl, który definiuje zestaw metod, zmiennych i stałych, a świadczenia konkretnej bazy danych niezależny od platformy warstwy trwałości bazy danych.


struktura DBI

DBI, a zwłaszcza w bazie niezależny od platformy, możemy zastosować go w Oracle, MySQL lub Informix oraz innych baz danych.

Pobierz cały wykres DBI API (Application Programming Interface: Application Programming Interface) wysłany z danych SQL, a następnie rozprowadzane do odpowiedniego sterownika w sprawie realizacji i wreszcie uzyskać dane z powrotem.

Zmienna konwencje nazw

Poniższy zestaw bardziej wspólną nazwą zmiennej nazewnictwa:

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

Database Connectivity

Następnie pokażemy Perl z bazą danych MySQL jako przykład tego, jak operacji bazodanowych.

Tutaj możemy utworzyć bazę danych w MySQL strony tabeli danych w3big bazy danych, struktury tabeli i danych znajduje się poniżej:

Pobierz arkusz danych: http://static.w3big.com/download/websites_perl.sql~~HEAD=dobj

Następnie możemy użyć następującego kodu, aby połączyć się z bazą danych:

#!/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

Kroki:

  • Użyj prepare () API przygotowany SQL.
  • Użyj execute () API do wykonywania instrukcji SQL.
  • Użyj mety (API), aby zwolnić uchwyt oświadczenie.
  • W końcu, jeśli wszystko pójdzie dobrze to zostanie przedstawiony w ciągu operacji.
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;

Aplikacja może również wiązać parametry wejściowe i wyjściowe, naśladując przykład przez podstawienie zmiennych zastępcze wykonanie kwerendy insert ?:

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;

operacja aktualizacji

Kroki:

  • Użyj prepare () API przygotowany SQL.
  • Użyj execute () API do wykonywania instrukcji SQL.
  • Użyj mety (API), aby zwolnić uchwyt oświadczenie.
  • W końcu, jeśli wszystko pójdzie dobrze to zostanie przedstawiony w ciągu operacji.
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;

Aplikacja może również wiązać parametry wejściowe i wyjściowe, naśladując przykład przez podstawienie zmiennych zastępczych wykonać kwerendę aktualizującą ?:

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

Oczywiście możemy także powiązać wartość należy ustawić w następujący sposób kraj będzie musiał zmodyfikować 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();

Usuwanie danych

Kroki:

  • Użyj prepare () API przygotowany SQL.
  • Użyj execute () API do wykonywania instrukcji SQL.
  • Użyj mety (API), aby zwolnić uchwyt oświadczenie.
  • W końcu, jeśli wszystko pójdzie dobrze to zostanie przedstawiony w ciągu operacji.

Poniższe dane zostaną stron WWW w danych Alexa jest większa niż 1000 są usuwane:

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

Zastosowanie do instrukcja

Sprawozdanienie może wykonać UPDATE, INSERT, DELETE lub operacji, jest dość krótki, pomyślne wykonanie zwraca prawdę, nie zwraca false, przykłady przedstawiają się następująco:

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

COMMIT operację

zobowiązać się do zatwierdzenia transakcji, aby zakończyć operację bazy danych:

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

operacja ROLLBACK

W przypadku wystąpienia błędu podczas wykonywania SQL, można przywrócić dane bez zmian:

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

sprawy

Oraz inne języki, Perl DBI działanie bazy danych obsługuje także przetwarzanie transakcji, istnieją dwa sposoby, aby to osiągnąć:

1, w związku z bazą danych, gdy rozpoczęła się transakcję

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

Powyższy kod w momencie połączenia ustawić AutoCommit jest fałszywe, to znaczy, gdy zaktualizować operację bazy danych, to nie automatycznie aktualizować te napisane bezpośrednio do bazy danych, ale do programu przez $ dbh-> zobowiązać się do tak, że dane faktycznie zapisywane w bazie danych lub $ dbh-> wycofywania cofnąć operację.

2, przez $ dbh-> begin_work () oświadczenie, aby rozpocząć transakcję

W ten sposób nie ma potrzeby ustawiania trybu automatycznego = 0 w momencie połączenia z bazą danych.

Można podłączyć przeprowadzenia transakcji bazy danych kilka razy, nie każda transakcja zaczynają łączyć się z bazą danych.

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

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

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

Odłączyć połączenia z bazą danych

Jeśli musimy odłączyć się od bazy danych, można użyć API odłączyć:

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