Latest web development tutorials

เชื่อมต่อฐานข้อมูล 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;