Perl MySQL Insert Data

摘要:在本教程中,我们将逐步向您展示如何使用 Perl DBI 将数据插入表中。

我们将使用Perl MySQL 创建表教程中创建的links表。如果您尚未创建links表,我们强烈建议您在继续本教程之前创建它。

Links table

要使用 Perl DBI 向表中插入新行,需要执行以下步骤:

  • 通过调用数据库句柄对象的prepare()方法来解析INSERT语句。 prepare() 方法返回一个语句句柄对象,该对象代表 MySQL 数据库中的一条语句。在此步骤中,Perl DBI 验证 INSERT 语句以确保其有效。如果INSERT语句中有错误,例如,它引用了不存在的表,或者是无效的 SQL 语句,则prepare()语句将返回undef值。此外,Perl 将错误消息填充到$DBI::errstr变量中。
  • 通过调用语句句柄对象的execute()方法来执行INSERT语句。在此步骤中,Perl 在 MySQL 数据库中执行INSERT语句。如果成功, execute()方法将返回true ;如果失败,则返回undef值。如果发生故障,如果启用了RaiseError属性,Perl 还会通过die()函数引发异常,立即中止脚本。

请注意,您可以使用这些步骤执行UPDATEDELETE语句。

Perl MySQL 插入示例

以下脚本允许您将数据插入链接表中:

#!/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;
}Code language: Perl (perl)

怎么运行的。

  • 首先,我们创建了一个名为get_links()的新子例程,用于从用户输入中获取链接信息。 get_links()子例程以数组形式返回链接列表。
  • 接下来,我们连接到perlmysqldb数据库。
  • 然后,我们准备了一条INSERT语句,将数据插入到links表中。问号 ( ? ) 是占位符,将被 title、url 和 target 的相应值替换。我们将INSERT语句传递给prepare()方法来准备执行。
  • 之后,我们迭代@links数组并执行INSERT语句。我们显示一条消息来指定数据是否成功插入到links表中。
  • 最后,我们通过调用数据库句柄对象的disconnect()方法断开与MySQL数据库的连接。

下面说明了当我们将 4 行插入到links表中时的输出。

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 successfullyCode language: PHP (php)

我们可以检查links表来验证插入操作:

SELECT * FROM links;Code language: SQL (Structured Query Language) (sql)
Perl MySQL Insert Example

在本教程中,您学习了如何使用 Perl DBI 将数据插入 MySQL 数据库表中。

本教程有帮助吗?