เชื่อมต่อฐานข้อมูล Perl
ในบทนี้เราจะมาแนะนำให้คุณสามารถเชื่อมต่อฐานข้อมูล Perl
Perl 5 เราสามารถใช้โมดูล DBI เพื่อเชื่อมต่อกับฐานข้อมูล
ชื่อภาษาอังกฤษ DBI: ฐานข้อมูลอิสระอินเตอร์เฟซที่เรียกว่าอินเตอร์เฟซที่ใช้ฐานข้อมูลอิสระจีน
ในฐานะที่เป็น DBI และภาษามาตรฐานการสื่อสารติดต่อฐานข้อมูล Perl ซึ่งได้กำหนดชุดของวิธีการตัวแปรและค่าคงที่และจัดให้มีฐานข้อมูลแพลตฟอร์มชั้นฐานข้อมูลความคงอยู่ที่เฉพาะเจาะจง
โครงสร้าง DBI
DBI และโดยเฉพาะฐานข้อมูลแพลตฟอร์มเราสามารถใช้มันใน Oracle, MySQL หรือ Informix และฐานข้อมูลอื่น ๆ
ได้รับทั้งหมดแผนภูมิ DBI API (Application Programming Interface: Application Programming Interface) ที่ส่งมาจากข้อมูล SQL แล้วแจกจ่ายให้กับคนขับรถที่สอดคล้องกันในการดำเนินการและในที่สุดก็จะได้รับข้อมูลกลับ
การประชุมชื่อตัวแปร
ไปตั้งชื่อทั่วไปของการตั้งชื่อตัวแปร:
$dsn 驱动程序对象的句柄 $dbh 一个数据库对象的句柄 $sth 一个语句或者一个查询对象的句柄 $h 通用的句柄 ($dbh, $sth, 或 $drh),依赖于上下文 $rc 操作代码返回的布什值(true 或 false) $rv 操作代码返回的整数值 @ary 查询返回的一行值的数组(列表) $rows 操作代码返回的行数值 $fh 文件句柄 undef NULL 值表示未定义 \%attr 引用属性的哈希值并传到方法上
เชื่อมต่อฐานข้อมูล
ต่อไปเราจะแสดงให้เห็นถึง Perl กับฐานข้อมูล MySQL เป็นตัวอย่างของวิธีการดำเนินงานฐานข้อมูล
ที่นี่เราสร้างฐานข้อมูลในเว็บไซต์ MySQL ตารางฐานข้อมูล w3big ข้อมูลโครงสร้างตารางและข้อมูลที่แสดงด้านล่าง:
ดาวน์โหลดแผ่นข้อมูล: http://static.w3big.com/download/websites_perl.sql
ต่อไปเราจะใช้รหัสต่อไปนี้เพื่อเชื่อมต่อกับฐานข้อมูล:
#!/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();
แทรก
ขั้นตอน:
- ใช้เตรียมความพร้อม () เตรียม API คำสั่ง SQL
- ใช้รัน () API เพื่อรันคำสั่ง
- ใช้เสร็จสิ้น () API จะปล่อยการจัดการคำสั่ง
- สุดท้ายถ้าทุกอย่างไปก็จะถูกส่งไปในช่วงการดำเนินการ
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;
โปรแกรมนี้ยังสามารถผูกเข้าและส่งออกพารามิเตอร์ตามตัวอย่างโดยการแทนตัวยึดตัวแปรที่จะดำเนินการสอบถามแทรก ?:
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;
การดำเนินการปรับปรุง
ขั้นตอน:
- ใช้เตรียมความพร้อม () เตรียม API คำสั่ง SQL
- ใช้รัน () API เพื่อรันคำสั่ง
- ใช้เสร็จสิ้น () API จะปล่อยการจัดการคำสั่ง
- สุดท้ายถ้าทุกอย่างไปก็จะถูกส่งไปในช่วงการดำเนินการ
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;
โปรแกรมนี้ยังสามารถผูกเข้าและส่งออกพารามิเตอร์ตามตัวอย่างโดยการแทนตัวยึดตัวแปรที่จะดำเนินการปรับปรุงแบบสอบถาม ?:
$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();
แน่นอนเรายังสามารถผูกค่าที่จะตั้งค่าเป็นดังนี้สำหรับประเทศที่จะมีการปรับเปลี่ยนการ 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();
ลบข้อมูล
ขั้นตอน:
- ใช้เตรียมความพร้อม () เตรียม API คำสั่ง SQL
- ใช้รัน () API เพื่อรันคำสั่ง
- ใช้เสร็จสิ้น () API จะปล่อยการจัดการคำสั่ง
- สุดท้ายถ้าทุกอย่างไปก็จะถูกส่งไปในช่วงการดำเนินการ
ข้อมูลต่อไปนี้จะเว็บไซต์ในข้อมูล Alexa มากกว่า 1000 ลบ:
$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;
ใช้ทำคำสั่ง
ไม่สามารถดำเนินการงบ UPDATE, INSERT หรือดำเนินการลบเขาค่อนข้างสั้นการดำเนินการประสบความสำเร็จผลตอบแทนจริงล้มเหลวก็จะส่งกลับเท็จตัวอย่างดังต่อไปนี้:
$dbh->do('DELETE FROM Websites WHERE alexa>1000');
COMMIT การดำเนินงาน
มุ่งมั่นที่จะกระทำธุรกรรมให้เสร็จสมบูรณ์การทำงานของฐานข้อมูล:
$dbh->commit or die $dbh->errstr;
ดำเนินการย้อนกลับ
หากมีข้อผิดพลาดเกิดขึ้นในระหว่างการดำเนินการของ SQL คุณสามารถย้อนกลับข้อมูลโดยไม่มีการเปลี่ยนแปลงใด ๆ
$dbh->rollback or die $dbh->errstr;
ธุรกิจ
และภาษาอื่น ๆ , Perl DBI การดำเนินงานของฐานข้อมูลนอกจากนี้ยังสนับสนุนการประมวลผลธุรกรรมมีสองวิธีเพื่อให้บรรลุมัน:
1 ในการเชื่อมต่อกับฐานข้อมูลเมื่อมันเริ่มทำธุรกรรม
$dbh = DBI->connect($dsn, $userid, $password, {AutoCommit => 0}) or die $DBI::errstr;
รหัสดังกล่าวในช่วงเวลาของการเชื่อมต่อที่กำหนด Autocommit เป็นเท็จนั่นคือเมื่อคุณอัปเดตฐานข้อมูลการดำเนินงานก็ไม่ได้ปรับปรุงโดยอัตโนมัติผู้เขียนโดยตรงไปยังฐานข้อมูล แต่ในการเขียนโปรแกรมโดย $ dbh-> การกระทำเพื่อ เพื่อให้ข้อมูลที่เขียนจริงไปยังฐานข้อมูลหรือ $ dbh-> ย้อนกลับย้อนกลับการดำเนินการ
2 โดย $ dbh-> begin_work () คำสั่งที่จะเริ่มต้นการทำธุรกรรม
ด้วยวิธีนี้มีความจำเป็นที่จะตั้ง Autocommit = 0 ในเวลาที่เชื่อมต่อฐานข้อมูล
คุณสามารถเชื่อมต่อการดำเนินการทำธุรกรรมฐานข้อมูลหลายครั้งไม่ได้ทำธุรกรรมทุกคนจะเป็นจุดเริ่มต้นในการเชื่อมต่อกับฐานข้อมูล
$rc = $dbh->begin_work or die $dbh->errstr; ##################### ##这里执行一些 SQL 操作 ##################### $dbh->commit; # 成功后操作 ----------------------------- $dbh->rollback; # 失败后回滚
ยกเลิกการเชื่อมต่อฐานข้อมูล
ถ้าเราต้องการที่จะปลดจากฐานข้อมูลที่คุณสามารถใช้ปลด API:
$rc = $dbh->disconnect or warn $dbh->errstr;