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;