Perl MySQL Tutorial(Hướng dẫn Perl MySQL)

0
63

Perl MySQL Connect

-Hãy bắt đầu bằng cách tạo một cơ sở dữ liệu đơn giản trong MySQL được đặt tên perlmysqldbcho phần trình diễn.

CREATE DATABASE perlmysqldb;

-Kết nối với cơ sở dữ liệu MySQL

+Khi bạn kết nối với cơ sở dữ liệu MySQL, bạn cần chỉ định thông tin sau:

  • Trước tiên, bạn cần cho DBI biết nơi tìm máy chủ cơ sở dữ liệu MySQL. Thông tin này được gọi là tên nguồn dữ liệu hoặc DSN. Tên nguồn dữ liệu chỉ định trình điều khiển sẽ sử dụng, cơ sở dữ liệu nào bạn muốn kết nối. Perl đòi hỏi tên nguồn dữ liệu để bắt đầu với  dbi:và tên của người lái xe, trong trường hợp này, nó được mysql, tiếp theo là một tràng :ví dụ dbi:mysql:, và sau đó là tên cơ sở dữ liệu ví dụ dbi:mysql:perlmysqldb.
  • Thứ hai, bạn cần cung cấp tên người dùng và mật khẩu của tài khoản người dùng MySQL kết nối với cơ sở dữ liệu.
  • Thứ ba, các thuộc tính kết nối tùy chọn chỉ định cách DBI xử lý các ngoại lệ có thể xảy ra khi nó kết nối với cơ sở dữ liệu MySQL.

+Cú pháp để tạo kết nối đến cơ sở dữ liệu MySQL như sau:

$dbh = DBI->connect($dsn,$username,$password,\%attr);

+Các  connect()phương thức trả về một xử lý cơ sở dữ liệu nếu kết nối cơ sở dữ liệu thiết lập thành công.

+Ví dụ: để kết nối với perlmysqldb, bạn sử dụng tập lệnh sau:

#!/usr/bin/perl
use strict;
use warnings;
use v5.10; # for say() function

use DBI;
say "Perl MySQL Connect Demo";
# MySQL database configuration
my $dsn = "DBI:mysql:perlmysqldb";
my $username = "root";
my $password = '';

# connect to MySQL database
my %attr = ( PrintError=>0,  # turn off error reporting via warn()
             RaiseError=>1);   # turn on error reporting via die()           

my $dbh  = DBI->connect($dsn,$username,$password, \%attr);

say "Connected to the MySQL database.";

+Làm thế nào nó hoạt động.

  • Đầu tiên, sử dụng use DBI;câu lệnh ở đầu tập lệnh.
  • Tiếp theo, xác định một số biến để giữ tên nguồn dữ liệu, tên người dùng và mật khẩu.
  • Sau đó, xác định một hàm băm có chứa các thuộc tính của kết nối.
  • Sau đó, truyền các đối số tương ứng cho  connect()phương thức để tạo kết nối với perlmysqdbcơ sở dữ liệu.
  • Cuối cùng, hiển thị thông báo cho biết chương trình đã được kết nối thành công với cơ sở dữ liệu MySQL.

+Sau đây là đầu ra của tập lệnh:

Perl MySQL Connect Demo
Connected to the MySQL database.

-Xử lý lỗi

+Perl DBI cho phép bạn xử lý lỗi theo cách thủ công và / hoặc tự động. Perl DBI phát hiện lỗi khi chúng xảy ra và các cuộc gọi hoặc  warn()hoặc  die()chức năng với một thông báo lỗi thích hợp.

+Các PrintErrorthuộc tính chỉ thị DBI để gọi  warn()chức năng mà chương trình lỗi để đầu ra. Các  RaiseErrorthuộc tính nói DBI để gọi  die()chức năng khi lỗi và hủy bỏ các tập lệnh ngay lập tức.

+Perl DBI cho phép PrintErrortheo mặc định. Tuy nhiên, chúng tôi thực sự khuyên bạn nên PrintErrortắt RaiseErrorthuộc tính và bật thuộc tính để hướng dẫn DBI tự động xử lý lỗi.

+Nếu bạn không bật RaiseError, bạn phải xử lý lỗi theo cách thủ công như sau:

# withou RasieError off:
 my $dbh  = DBI->connect($dsn,$username,$password) or 
            die("Error connecting to the database: $DBI::errstr\n");

+Khi xảy ra lỗi, DBI lưu thông báo lỗi trong  $DBI::errstrbiến. Về cơ bản, câu lệnh trên có nghĩa là nếu kết nối với cơ sở dữ liệu không thành công, nó sẽ hiển thị thông báo lỗi và hủy bỏ tập lệnh ngay lập tức.

+Một lợi ích khác của việc bật RaiseErrorthuộc tính là mã sẽ trông dễ đọc hơn vì bạn không phải bao gồm  or die()câu lệnh ở mọi nơi mà bạn gọi phương thức DBI.

-Ngắt kết nối khỏi Cơ sở dữ liệu MySQL

+Nếu bạn không còn tương tác với cơ sở dữ liệu MySQL, bạn nên ngắt kết nối khỏi nó. Đây là một thực hành lập trình tốt.

+Để ngắt kết nối khỏi cơ sở dữ liệu, bạn sử dụng disconect()phương pháp của đối tượng xử lý cơ sở dữ liệu như sau:

# disconnect from the MySQL database
$dbh->disconnect();

Perl MySQL Tạo bảng

-Để tạo một bảng mới, bạn sử dụng các bước sau:

  • Kết nối với cơ sở dữ liệu MySQL.
  • Thực thi câu lệnh CREATE TABLE bằng cách gọi  do()phương thức của đối tượng xử lý cơ sở dữ liệu.
  • Ngắt kết nối khỏi cơ sở dữ liệu MySQL.

-Perl MySQL tạo bảng ví dụ

+Chúng tôi sẽ tạo ba bảng trong perlmysqldbcơ sở dữ liệu mẫu:

  • links : lưu trữ các URL bao gồm link_id, title, URL và target.
  • tags : lưu trữ các thẻ cho các liên kết bao gồm tag_id và tag.
  • link_tags : lưu trữ mối quan hệ giữa các bảng liên kết và thẻ, chứa hai trường link_id và tag_id.

+Sơ đồ sau minh họa các bảng:

Perl MySQL Create Table - Bảng mẫu

+Sau đây là tập lệnh Perl tạo các bảng:

#!/usr/bin/perl
use strict;
use warnings;
use v5.10; # for say() function

use DBI;

say "Perl MySQL Create Table Demo";

# MySQL database configurations
my $dsn = "DBI:mysql:perlmysqldb";
my $username = "root";
my $password = '';

# connect to MySQL database
my %attr = (PrintError=>0, RaiseError=>1);

my $dbh = DBI->connect($dsn,$username,$password, \%attr);

# create table statements
my @ddl =     (
		# create tags table
		"CREATE TABLE tags (
			tag_id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
			tag varchar(255) NOT NULL
	        ) ENGINE=InnoDB;",
	       # create links table
	       "CREATE TABLE links (
		  link_id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
		  title varchar(255) NOT NULL,
		  url varchar(255) NOT NULL,
		  target varchar(45) NOT NULL
		) ENGINE=InnoDB;",
		# create link_tags table
		"CREATE TABLE link_tags (
		  link_id int(11) NOT NULL,
		  tag_id int(11) NOT NULL,
		  PRIMARY KEY (link_id,tag_id),
		  KEY fk_link_idx (link_id),
		  KEY fk_tag_idx (tag_id),
		  CONSTRAINT fk_tag FOREIGN KEY (tag_id) 
		     REFERENCES tags (tag_id),
		  CONSTRAINT fk_link FOREIGN KEY (link_id) 
			 REFERENCES links (link_id) 
		) ENGINE=InnoDB"
	       );

# execute all create table statements	       
for my $sql(@ddl){
  $dbh->do($sql);
}	       

say "All tables created successfully!";

# disconnect from the MySQL database
$dbh->disconnect();

+Làm thế nào nó hoạt động.

  • Đầu tiên, tạo kết nối đến perlmysqldbcơ sở dữ liệu bằng  connect()phương pháp này.
  • Tiếp theo, xác định một mảng  @ddlchứa ba  CREATE TABLEcâu lệnh.
  • Sau đó, gọi  do()phương thức của đối tượng xử lý cơ sở dữ liệu để thực thi từng  CREATE TABLEcâu lệnh bên trong vòng lặp. Chúng tôi thường sử dụng  do()phương thức để thực hiện một câu lệnh không chọn không trả về tập kết quả.
  • Sau đó, hiển thị thông báo cho biết tất cả các bảng đã được tạo thành công.
  • Cuối cùng, ngắt kết nối khỏi cơ sở dữ liệu.

+Đầu ra của tập lệnh như sau:

Perl MySQL Create Table Demo
All tables created successfully!

+Bây giờ, bạn có thể kiểm tra perlmysqldbcơ sở dữ liệu để xác minh xem các bảng đã được tạo thành công hay chưa.

Ví dụ về Perl MySQL Create Table

Perl MySQL Chèn dữ liệu

-Chúng ta sẽ sử dụng linksbảng được tạo trong phần hướng dẫn tạo bảng Perl MySQL . Nếu bạn chưa tạo linksbảng, chúng tôi thực sự khuyên bạn nên tạo nó trước khi tiếp tục với hướng dẫn này.

Bảng liên kết

-Để chèn một hàng mới vào bảng bằng cách sử dụng Perl DBI, bạn cần thực hiện các bước sau:

  • Phân tích cú pháp câu lệnh INSERT bằng cách gọi phương thức chuẩn bị () của đối tượng xử lý cơ sở dữ liệu. Phương thức chuẩn bị () trả về một đối tượng xử lý câu lệnh đại diện cho một câu lệnh trong cơ sở dữ liệu MySQL. Trong bước này, Perl DBI xác thực câu lệnh INSERT để đảm bảo rằng nó hợp lệ. Nếu có lỗi trong INSERTcâu lệnh, ví dụ: nó tham chiếu đến một bảng không tồn tại hoặc đó là một câu lệnh SQL không hợp lệ,  prepare()câu lệnh trả về giá trị là undef. Ngoài ra, Perl điền thông báo lỗi vào  $DBI::errstrbiến.
  • Thực thi INSERTcâu lệnh bằng cách gọi  execute()phương thức của đối tượng xử lý câu lệnh. Trong bước này, Perl thực hiện INSERTcâu lệnh trong cơ sở dữ liệu MySQL. Các  execute()trở về phương pháp truethành công và giá trị undeftrên thất bại. Trong trường hợp không thành công, Perl cũng đưa ra một ngoại lệ thông qua die()chức năng hủy bỏ tập lệnh ngay lập tức nếu RaiseErrorthuộc tính được bật.

Lưu ý rằng bạn có thể thực hiện câu lệnh UPDATE hoặc DELETE bằng cách sử dụng các bước sau.

-Ví dụ về Perl MySQL INSERT

+Tập lệnh sau cho phép bạn chèn dữ liệu vào bảng liên kết:

#!/usr/bin/perl
use strict;
use warnings;
use v5.10; # for say() function

use DBI;

# MySQL database configurations
my $dsn = "DBI:mysql:perlmysqldb";
my $username = "root";
my $password = '';

say "Perl MySQL INSERT Demo";

# get user's input links
my @links = get_links();

# connect to MySQL database
my %attr = (PrintError=>0,RaiseError=>1 );
my $dbh = DBI->connect($dsn,$username,$password,\%attr);

# insert data into the links table
my $sql = "INSERT INTO links(title,url,target)
	   VALUES(?,?,?)";

my $stmt = $dbh->prepare($sql);

# execute the query
foreach my $link(@links){
  if($stmt->execute($link->{title}, $link->{url}, $link->{target})){
    say "link $link->{url} inserted successfully";
  }

}
$stmt->finish();

# disconnect from the MySQL database
$dbh->disconnect();

sub get_links{
   my $cmd = '';
   my @links;
   # get links from the command line
   my($title,$url,$target);

   # repeatedly ask for link data from command line
   do{
     say "title:";
     chomp($title = <STDIN>); 

     say "url:";
     chomp($url = <STDIN>);

     say "target:";
     chomp($target = <STDIN>);

     #
     my %link = (title=> $title, url=> $url, target=> $target);

     push(@links,\%link);

     print("\nDo you want to insert another link? (Y/N)?");
     chomp($cmd = <STDIN>);
     $cmd = uc($cmd);
   }until($cmd eq 'N');

   return @links;
}

+Làm thế nào nó hoạt động.

  • Đầu tiên, chúng tôi tạo một chương trình con mới được gọi get_links()để lấy thông tin của liên kết từ đầu vào của người dùng. Chương  get_links()trình con trả về một danh sách các liên kết dưới dạng một mảng.
  • Tiếp theo, chúng tôi kết nối với perlmysqldbcơ sở dữ liệu.
  • Sau đó, chúng tôi chuẩn bị một INSERTcâu lệnh chèn dữ liệu vào linksbảng. Dấu chấm hỏi ( ?) là phần giữ chỗ sẽ được thay thế bằng các giá trị tiêu đề, url và đích tương ứng. Chúng tôi đã chuyển  INSERTcâu lệnh cho  prepare()phương thức để chuẩn bị thực thi.
  • Sau đó, chúng tôi lặp lại  @linksmảng và thực hiện INSERTcâu lệnh. Chúng tôi đã hiển thị một thông báo để chỉ định xem dữ liệu được chèn vào linksbảng thành công hay không.
  • Cuối cùng, chúng tôi ngắt kết nối khỏi cơ sở dữ liệu MySQL bằng cách gọi  disconnect()phương thức của đối tượng xử lý cơ sở dữ liệu.

+Sau đây minh họa kết quả khi chúng tôi chèn 4 hàng vào linksbảng.

Perl MySQL INSERT Demo
title:
MySQL Tutorial
url:
httpx://www.mysqltutorial.org/
target:
_self
Do you want to insert another link? (Y/N)?Y
title:
Perl MySQL Insert Demo
url:
httpx://www.mysqltutorial.org/perl-mysql/perl-mysql-insert/
target:
_blank
Do you want to insert another link? (Y/N)?Y
title:
Perl
url:
httpx://www.perl.org
target:
_blank
Do you want to insert another link? (Y/N)?Y
title:
MySQL
url:
httpx://www.mysql.com
target:
_self
Do you want to insert another link? (Y/N)?N
link http://mysqltutorial.org/ inserted successfully
link https://www.mysqltutorial.org/perl-mysql/perl-mysql-insert/ inserted successfully
link http://www.perl.org inserted successfully
link http://www.mysql.com inserted successfully

+Chúng tôi có thể kiểm tra linksbảng để xác minh các hoạt động chèn:

SELECT * FROM links;
Ví dụ chèn Perl MySQL

Giao dịch Perl MySQL

-Một giao dịch cơ sở dữ liệu phải là ACID, là nguyên tử, nhất quán, cô lập và bền:

  • Nguyên tử : tất cả các hoạt động đối với cơ sở dữ liệu phải xảy ra hoặc không có gì xảy ra. Điều này giúp tránh sự không nhất quán của dữ liệu bằng cách cập nhật một phần.
  • Nhất quán : để đảm bảo rằng giao dịch không vi phạm các ràng buộc toàn vẹn.
  • Isolated : để đảm bảo rằng thay đổi được thực hiện bởi hoạt động đang hoạt động sẽ hiển thị với các hoạt động đồng thời khác.
  • Bền : để đảm bảo rằng các giao dịch đã cam kết sẽ tồn tại vĩnh viễn.

-Perl DBI cung cấp một bộ API cho phép bạn giải quyết các giao dịch một cách hiệu quả. Để xử lý các giao dịch trong Perl DBI, bạn thực hiện các bước sau:

  • Đặt AutoCommitthuộc tính để falsekích hoạt giao dịch.
  • Thực thi các hoạt động trong một evalkhối, ở cuối evalkhối, gọi  commit()phương thức của đối tượng xử lý cơ sở dữ liệu để thực hiện các thay đổi.
  • Kiểm tra biến  $@để tìm lỗi và gọi  rollback()phương thức của cơ sở dữ liệu để khôi phục các thay đổi nếu xảy ra lỗi.

-Ví dụ về giao dịch Perl MySQL

+Trong ví dụ này, chúng tôi sẽ:

  • Chèn một liên kết mới vào linksbảng; lấy id chèn cuối cùng của liên kết được chèn.
  • Chèn một thẻ mới vào tagsbảng; lấy id chèn cuối cùng của thẻ được chèn.
  • Liên kết liên kết và thẻ đã chèn bằng cách thêm một hàng mới vào  link_tagsbảng với id liên kết và id thẻ từ thao tác đầu tiên và thứ hai.
Giao dịch Perl MySQL - Bảng mẫu

+Chúng tôi sẽ tóm tắt ba hoạt động bên trong một giao dịch. Tập lệnh sau minh họa cách xử lý giao dịch bằng Perl DBI:

#!/usr/bin/perl
use strict;
use warnings;
use v5.10; # for say() function

use DBI;

say "Perl MySQL Transaction Demo";

# MySQL database configurations
my $dsn = "DBI:mysql:perlmysqldb";
my $username = "root";
my $password = '';

# connect to MySQL database
my %attr = (RaiseError=>1,  # error handling enabled 
	    AutoCommit=>0); # transaction enabled

my $dbh = DBI->connect($dsn,$username,$password, \%attr);

eval{
	# insert a new link
	my $sql = "INSERT INTO links(title,url,target)
		   VALUES(?,?,?)";
	my $sth = $dbh->prepare($sql);
	$sth->execute("Comprehensive Perl Archive Network","http://www.cpan.org/","_blank");
	# get last insert id of the link
	my $link_id = $dbh->{q{mysql_insertid}};

	# insert a new tag
	$sql = "INSERT INTO tags(tag) VALUES(?)";
	$sth = $dbh->prepare($sql);
	$sth->execute('Perl');

	# get last insert id of the tag
	my $tag_id = $dbh->{q{mysql_insertid}};

	# insert a new link and tag relationship
	$sql = "INSERT INTO link_tags(link_id,tag_id)
		VALUES(?,?)";
	$sth = $dbh->prepare($sql);
	$sth->execute($link_id,$tag_id);

	# if everything is OK, commit to the database
	$dbh->commit();
	say "Link and tag have been inserted and associated successfully!";
};

if($@){
	say "Error inserting the link and tag: $@";
	$dbh->rollback();
}

# disconnect from the MySQL database
$dbh->disconnect();

Lưu ý rằng  $dbh->{q{mysql_insertid}}biểu thức trả về id chèn cuối cùng.

-Sau đây là đầu ra của tập lệnh:

Perl MySQL Transaction Demo
Link and tag have been inserted and associated successfully!

-Chúng tôi có thể xác minh giao dịch bằng cách truy vấn linkstagsvà  link_tagsbảng:

SELECT * FROM links;
perl giao dịch mysql - bảng liên kết
SELECT * FROM tags;
perl giao dịch mysql - bảng thẻ
SELECT * FROM link_tags;

Perl MySQL Chọn dữ liệu

-Để truy vấn dữ liệu từ các bảng cơ sở dữ liệu MySQL từ chương trình Perl, bạn sử dụng các bước sau:

  • Kết nối với cơ sở dữ liệu MySQL bằng cách gọi  connect()phương thức.
  • Chuẩn bị một SELECTcâu lệnh để thực thi bằng cách sử dụng  prepare()phương thức của đối tượng xử lý cơ sở dữ liệu. Các  prepare()phương thức trả về một tuyên bố xử lý đối tượng đại diện cho một tuyên bố trong cơ sở dữ liệu MySQL.
  • Thực thi SELECTcâu lệnh bằng cách gọi  execute()phương thức của đối tượng xử lý câu lệnh.
  • Gọi fetchrow_array(),  fetchrow_arrayref()hoặc  fetchrow_hashref()phương pháp để lấy dữ liệu từ tập kết quả cho đến khi không có hàng rời. Bạn có thể sử dụng  whilecâu lệnh để lặp lại tập kết quả.
  • Ngắt kết nối khỏi cơ sở dữ liệu MySQL.

-Ví dụ về Perl MySQL SELECT

+Chúng tôi sẽ sử dụng các bảng sau cho các ví dụ:

Giao dịch Perl MySQL - Bảng mẫu

+Nếu bạn chưa tạo bảng, chúng tôi thực sự khuyên bạn nên tạo chúng bằng cách làm theo hướng dẫn tạo bảng .

-Truy vấn dữ liệu từ một ví dụ bảng

-Ví dụ sau chọn dữ liệu từ linksbảng:

#!/usr/bin/perl
use strict;
use warnings;
use v5.10; # for say() function

use DBI;

# MySQL database configurations
my $dsn = "DBI:mysql:perlmysqldb";
my $username = "root";
my $password = '';

# connect to MySQL database
my %attr = ( PrintError=>0,  # turn off error reporting via warn()
             RaiseError=>1   # report error via die()
           );
my $dbh = DBI->connect($dsn,$username,$password,\%attr);

# query data from the links table
query_links($dbh);

# disconnect from the MySQL database
$dbh->disconnect();

-Logic chính được thực hiện trong  query_linkschương trình con:

sub query_links{
  # query from the links table

  my ($dbh) = @_;
  my $sql = "SELECT title,
                    url
             FROM links";
  my $sth = $dbh->prepare($sql);

  # execute the query
  $sth->execute();

  while(my @row = $sth->fetchrow_array()){
     printf("%s\t%s\n",$row[0],$row[1]);
  }       
  $sth->finish();
}

-Đầu ra của tập lệnh như sau:

MySQL Tutorial  http://mysqltutorial.org/
Perl MySQL Insert Demo  https://www.mysqltutorial.org/perl-mysql/perl-mysql-insert/
Perl    http://www.perl.org
MySQL   http://www.mysql.com
Comprehensive Perl Archive Network      http://www.cpan.org/

-Truy vấn dữ liệu từ một bảng với ví dụ về tham số

+Chúng tôi thường chuyển các giá trị cho truy vấn để chọn dữ liệu dựa trên điều kiện. Ví dụ sau truy vấn dữ liệu từ  linksvới mục tiêu được chỉ định từ linksbảng:

sub query_links_by_target{
  # query from the links table by target

  my ($dbh,$target) = @_;
  my $sql = "SELECT title,url,target
             FROM links
             WHERE target = ?";
  my $sth = $dbh->prepare($sql);

  # execute the query
  $sth->execute($target);

  while(my @row = $sth->fetchrow_array()){
     printf("%s\t%s\n",$row[0],$row[1],$row[3]);
  }       
  $sth->finish();
}

+Chúng tôi đặt dấu chấm hỏi làm trình giữ chỗ trong mệnh đề WHERE của SELECTcâu lệnh. Trình giữ chỗ sẽ được thay thế bằng giá trị mà chúng tôi đã chuyển cho  execute()phương thức.

-Ví dụ, để chọn các liên kết có mục tiêu _self, bạn gọi chương trình con như sau:

query_links_by_target($dbh,'_self');

-Đầu ra là:

MySQL Tutorial  http://mysqltutorial.org/    _self
MySQL   http://www.mysql.com    _self

Hoặc để chọn các liên kết có mục tiêu _blank, bạn chuyển giá trị cho  query_links_by_target()chương trình con như sau:

query_links_by_target($dbh,'_blank');

Đầu ra là:

Perl MySQL Insert Demo  https://www.mysqltutorial.org/perl-mysql/perl-mysql-insert/      _blank
Perl    http://www.perl.org     _blank
Comprehensive Perl Archive Network      http://www.cpan.org/    _blank

-Truy vấn dữ liệu và kết xuất tập hợp kết quả

+Đối tượng xử lý câu lệnh cung cấp một phương thức thuận tiện được đặt tên  dump_results()để hiển thị nhanh tập hợp kết quả mà không cần gọi các  fetchrow_*phương thức.

+Ví dụ sau chọn dữ liệu từ tagsbảng và kết xuất tập hợp kết quả bằng cách sử dụng  dump_results()phương pháp:

sub query_tags{
  # query data from the tags table 

  my ($dbh) = @_;
  my $sql = "SELECT * FROM tags";
  my $sth = $dbh->prepare($sql);
  $sth->execute();
  $sth->dump_results( );
  $sth->finish();
}

Đầu ra là:

'1', 'Perl'
1 rows

-Truy vấn dữ liệu từ nhiều bảng

+Dữ liệu Các kịch bản sau đây chọn từ ba bảng: linkstagsvà  link_tagsbảng bằng cách sử dụng một SELECTtuyên bố với INNER JOIN khoản.

sub query_all{
  # query data from links, tags, link_tags tables
  my ($dbh) = @_;

  my $sql = "SELECT title, url, target,tag
             FROM link_tags
             INNER JOIN links ON links.link_id = link_tags.link_id
             INNER JOIN tags  ON tags.tag_id = link_tags.tag_id";

  my $sth = $dbh->prepare($sql);

  $sth->execute();

  while(my $array_ref = $sth->fetchrow_arrayref()){
    printf("%s\t%s\t%s\t%s\n", $array_ref->[0],
                             $array_ref->[1],
                             $array_ref->[2],
                             $array_ref->[3]);
  }
  $sth->finish();
}

+Trong ví dụ này, chúng tôi đã sử dụng  fetchrow_arrayref()phương thức để tìm nạp dữ liệu từ tập kết quả. Các  fetchrow_arrayref()phương thức trả về một tham chiếu đến một mảng chứ không phải là một mảng riêng của mình. Các  fetchrow_arrayref()phương pháp không sao chép dữ liệu vào một mảng mới cho mỗi hàng trong tập kết quả như  fetchrow_array()phương pháp, do đó, nó là nhanh hơn so với  fetchrow_array()phương pháp.

+Sau đây là đầu ra của tập lệnh:

Comprehensive Perl Archive Network      http://www.cpan.org/    _blank  Perl

Dữ liệu cập nhật Perl MySQL

-Các bước cập nhật dữ liệu Perl MySQL

-Để cập nhật dữ liệu trong bảng, bạn sử dụng câu lệnh UPDATE . Bạn sử dụng các bước sau để cập nhật dữ liệu trong bảng MySQL bằng cách sử dụng DBI:

-Đầu tiên, kết nối với cơ sở dữ liệu MySQL bằng  connect()phương pháp này.

my $dbh = DBI->connect($dsn,$username,$password, \%attr);

-Tiếp theo, xây dựng một UPDATEcâu lệnh và chuyển nó đến  prepare()phương thức của đối tượng xử lý cơ sở dữ liệu để chuẩn bị một câu lệnh để thực thi.

my $sql = "UPDATE table_name SET col_name = ? WHERE id=?";
my $sth = $dbh->prepare($sql);

-Sau đó, nếu bạn muốn truyền các giá trị từ chương trình Perl vào UPDATEcâu lệnh, bạn đặt chỗ dành sẵn (?) Trong câu lệnh và ràng buộc tham số tương ứng bằng cách sử dụng bind_param()phương thức của đối tượng xử lý câu lệnh.

$sth->bind_param(1,$value);
$sth->bind_param(2,$id);

-Sau đó, gọi  execute()phương thức của đối tượng xử lý câu lệnh để thực hiện truy vấn.

$sth->execute();

-Cuối cùng, ngắt kết nối khỏi cơ sở dữ liệu MySQL bằng  disconnect()phương pháp này.

$dbh->disconnect();

-Ví dụ về dữ liệu cập nhật Perl MySQL

-Ví dụ sau cập nhật dữ liệu trong bảng liên kết với id liên kết 2. Trước khi cập nhật dữ liệu, hãy kiểm tra bảng liên kết trước:

SELECT * FROM links;
Ví dụ về cập nhật dữ liệu Perl MySQL - Bảng liên kết

-Xem chương trình sau:

#!/usr/bin/perl
use strict;
use warnings;
use v5.10; # for say() function

use DBI;

# MySQL database configurations
my $dsn = "DBI:mysql:perlmysqldb";
my $username = "root";
my $password = '';

say "Perl MySQL Update Data Demo";

# connect to MySQL database
my %attr = ( PrintError=>0, RaiseError=>1);

my $dbh = DBI->connect($dsn,$username,$password, \%attr);

# update statement
my $sql = "UPDATE links
           SET title = ?,
               url = ?, 
               target = ?
	   WHERE id = ?";

my $sth = $dbh->prepare($sql);

my $id = 2;
my $title = "Perl MySQL Update Data Tutorial";
my $url = "https://www.mysqltutorial.org/perl-mysql/perl-mysql-update/";
my $target = "_self";

# bind the corresponding parameter
$sth->bind_param(1,$title);
$sth->bind_param(2,$url);
$sth->bind_param(3,$target);
$sth->bind_param(4,$id);

# execute the query
$sth->execute();

say "The record has been updated successfully!";

$sth->finish();

# disconnect from the MySQL database
$dbh->disconnect();

Đầu ra của chương trình là:

Perl MySQL Update Data Demo
The record has been updated successfully!

-Hãy truy vấn lại linksbảng để xác minh cập nhật.

SELECT * FROM links;
Ví dụ về dữ liệu cập nhật Perl MySQL - Bảng liên kết sau khi cập nhật

-Bản ghi liên kết với id 2 đã được thay đổi thành công.

Perl MySQL Delete Data

-Perl MySQL xóa dữ liệu các bước

+Để xóa dữ liệu trong bảng MySQL khỏi chương trình Perl, bạn cần thực hiện các bước sau:

+Đầu tiên, sử dụng  connect()phương thức để kết nối với cơ sở dữ liệu MySQL:

my $dbh = DBI->connect($dsn,$username,$password, \%attr);

+Tiếp theo, để xóa một hàng khỏi bảng, bạn sử dụng DELETEcâu lệnh có WHEREmệnh đề. Bạn cần đặt chỗ dành sẵn ( ?) trong DELETEcâu lệnh để chuyển các giá trị từ chương trình sang câu lệnh. Các phần giữ chỗ (?) Sẽ được thay thế bằng các giá trị.

my $sql = "DELETE FROM table_name WHERE id=?";
my $sth = $dbh->prepare($sql);

+Sau đó, gọi  execute()phương thức của đối tượng xử lý câu lệnh để thực hiện truy vấn. Bạn cũng cần chuyển các đối số thay thế chỗ dành sẵn trong DELETEcâu lệnh vào  execute()phương thức.

$sth->execute($id);

+Sau đó, ngắt kết nối khỏi cơ sở dữ liệu MySQL.

$dbh->disconnect();

+Cuối cùng, bạn có thể hiển thị một thông báo để chỉ định rằng hàng đã được xóa thành công.

-Perl MySQL xóa dữ liệu ví dụ

+Chúng tôi tạo một bản sao của linksbảng để trình diễn.

CREATE TABLE clinks
SELECT * FROM links;

+MySQL đã tạo một bảng mới được đặt tên clinkscó cùng cấu trúc và dữ liệu với linksbảng.

+Sau đây là nội dung của clinksbảng:

SELECT * FROM clinks;
Ví dụ về xóa dữ liệu trong Perl MySQL - bảng clinks

+Chương trình sau sẽ xóa liên kết có id 1 trước, sau đó cắt bớt clinksbảng.

#!/usr/bin/perl
use strict;
use warnings;
use v5.10; # for say() function

use DBI;

say "Perl MySQL Delete Data Demo";

# MySQL database configurations
my $dsn = "DBI:mysql:perlmysqldb";
my $username = "root";
my $password = '';

# connect to MySQL database
my %attr = (PrintError=>0, RaiseError=>1);

my $dbh = DBI->connect($dsn,$username,$password, \%attr);

# delete 1 row with id 1
# say "Link with id 1 deleted successfully!" if delete_one_row($dbh,1);

# delete all rows in the clinks table
# say "All links deleted successfully!" if delete_all_rows($dbh);

# disconnect from the MySQL database
$dbh->disconnect();

sub delete_one_row {
    # delete one row from table
    # $dbh: database handle
    # $link_id: id of the link that need to delete
    my($dbh,$link_id)  = @_;
    my $sql = "DELETE FROM clinks WHERE link_id = ?";
    my $sth = $dbh->prepare($sql);
    return $sth->execute($link_id);
}

sub delete_all_rows {
    # delete all rows in the clinks table
    my($dbh) = @_;
    my $sql = "TRUNCATE TABLE clinks";
    my $sth = $dbh->prepare($sql);
    return $sth->execute(); 
}

+Đầu tiên, bỏ chú thích của lời gọi đến  delete_one_row()chương trình con và thực thi chương trình. Chúng tôi nhận được thông báo sau:

Perl MySQL Delete Data Demo
Link with id 1 deleted successfully!

+Kiểm tra clinksbảng để xác minh việc xóa:

SELECT * FROM clinks;
Ví dụ về xóa dữ liệu trong Perl MySQL - Xóa 1 hàng

+Thứ hai, nhận xét lệnh gọi đến  delete_on_row()chương trình con, xóa nhận xét của lệnh gọi đến  delete_all_rows()chương trình con và thực thi chương trình:

Perl MySQL Delete Data Demo
All links deleted successfully!

+Truy vấn lại clinksbảng để xác minh thao tác cắt ngắn bảng:

SELECT * FROM clinks;

BÌNH LUẬN

Vui lòng nhập bình luận của bạn
Vui lòng nhập tên của bạn ở đây