Latest web development tutorials

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;