koneksi database perl
bab ini kita akan memperkenalkan Anda menghubungkan database Perl.
Perl 5, kita dapat menggunakan modul DBI untuk koneksi ke database.
DBI English Nama: database Independent Interface, Cina disebut antarmuka database-independen.
Sebagai DBI dan bahasa Perl antarmuka database standar komunikasi, yang mendefinisikan satu set metode, variabel dan konstanta, dan menyediakan database platform-independen lapisan database ketekunan tertentu.
struktur DBI
DBI dan khususnya database yang platform-independen, kita bisa menerapkannya dalam Oracle, MySQL atau Informix, dan database lainnya.
Dapatkan semua grafik DBI API (Application Programming Interface: Application Programming Interface) yang dikirim dari data SQL, dan kemudian didistribusikan ke driver yang sesuai pada pelaksanaan, dan akhirnya mendapatkan data kembali.
konvensi nama variabel
Berikut set nama yang lebih umum dari variabel penamaan:
$dsn 驱动程序对象的句柄 $dbh 一个数据库对象的句柄 $sth 一个语句或者一个查询对象的句柄 $h 通用的句柄 ($dbh, $sth, 或 $drh),依赖于上下文 $rc 操作代码返回的布什值(true 或 false) $rv 操作代码返回的整数值 @ary 查询返回的一行值的数组(列表) $rows 操作代码返回的行数值 $fh 文件句柄 undef NULL 值表示未定义 \%attr 引用属性的哈希值并传到方法上
database Connectivity
Selanjutnya, kita menunjukkan Perl dengan database MySQL sebagai contoh bagaimana operasi database.
Di sini kita membuat database di MySQL Website tabel database w3big data, struktur tabel dan data ditunjukkan di bawah ini:
Download lembar data: http://static.w3big.com/download/websites_perl.sql
Selanjutnya, kita menggunakan kode berikut untuk menghubungkan ke 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();
Insert
langkah-langkah:
- Gunakan mempersiapkan () API disiapkan pernyataan SQL.
- Gunakan mengeksekusi () API untuk mengeksekusi pernyataan SQL.
- Gunakan finish () API untuk melepaskan pernyataan pegangan.
- Akhirnya, jika semua berjalan dengan baik maka akan diserahkan lebih operasi.
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;
Aplikasi ini juga dapat mengikat parameter input dan output, mengikuti contoh dengan menggantikan placeholder variabel untuk mengeksekusi query 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;
operasi update
langkah-langkah:
- Gunakan mempersiapkan () API disiapkan pernyataan SQL.
- Gunakan mengeksekusi () API untuk mengeksekusi pernyataan SQL.
- Gunakan finish () API untuk melepaskan pernyataan pegangan.
- Akhirnya, jika semua berjalan dengan baik maka akan diserahkan lebih operasi.
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;
Aplikasi ini juga dapat mengikat parameter input dan output, mengikuti contoh dengan menggantikan placeholder variabel untuk melakukan query pembaruan ?:
$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();
Tentu saja, kami juga bisa mengikat nilai yang akan ditetapkan sebagai berikut untuk negara harus memodifikasi CN alexa 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();
Hapus Data
langkah-langkah:
- Gunakan mempersiapkan () API disiapkan pernyataan SQL.
- Gunakan mengeksekusi () API untuk mengeksekusi pernyataan SQL.
- Gunakan finish () API untuk melepaskan pernyataan pegangan.
- Akhirnya, jika semua berjalan dengan baik maka akan diserahkan lebih operasi.
Berikut data akan Website di data alexa lebih besar dari 1000 yang dihapus:
$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;
Gunakan melakukan pernyataan
jangan laporan dapat melakukan UPDATE, INSERT, atau DELETE operasi, dia cukup singkat, keberhasilan pelaksanaan mengembalikan benar, gagal ia mengembalikan palsu, contoh adalah sebagai berikut:
$dbh->do('DELETE FROM Websites WHERE alexa>1000');
COMMIT operasi
berkomitmen untuk melakukan transaksi untuk menyelesaikan operasi database:
$dbh->commit or die $dbh->errstr;
operasi ROLLBACK
Jika kesalahan terjadi selama eksekusi SQL, Anda dapat memutar kembali data tanpa perubahan apapun:
$dbh->rollback or die $dbh->errstr;
urusan
Dan bahasa lainnya, perl DBI operasi database juga mendukung proses transaksi, ada dua cara untuk mencapai itu:
1, di koneksi ke database ketika memulai transaksi
$dbh = DBI->connect($dsn, $userid, $password, {AutoCommit => 0}) or die $DBI::errstr;
Kode di atas pada saat koneksi mengatur Autocommit adalah palsu, yaitu ketika Anda memperbarui operasi database, itu tidak secara otomatis memperbarui yang ditulis langsung ke database, tapi untuk program dengan $ dbh-> berkomitmen untuk sehingga data benar-benar ditulis ke database, atau $ dbh-> rollback untuk memutar kembali operasi.
2, dengan $ dbh-> begin_work () pernyataan untuk memulai transaksi
Dengan cara ini tidak perlu untuk mengatur Autocommit = 0 dalam waktu koneksi database.
Anda dapat menghubungkan operasi database transaksi beberapa kali, tidak setiap transaksi mulai terhubung ke database.
$rc = $dbh->begin_work or die $dbh->errstr; ##################### ##这里执行一些 SQL 操作 ##################### $dbh->commit; # 成功后操作 ----------------------------- $dbh->rollback; # 失败后回滚
Lepaskan koneksi database
Jika kita perlu memutuskan sambungan dari database, Anda dapat menggunakan disconnect API:
$rc = $dbh->disconnect or warn $dbh->errstr;