Perl MySQL插入数据

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

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

要使用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()函数引发异常以立即中止脚本。

请注意,您可以使用以下步骤执行UPDATE或DELETE语句。

Perl MySQL INSERT示例

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

#!/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;
}

这个怎么运作。

  • 首先,我们创建了一个名为get_links()的新子例程,以从用户输入中获取链接的信息。
    get_links()子例程以数组形式返回链接列表。

  • 接下来,我们连接到perlmysqldb数据库。

  • 然后,我们准备了一个INSERT语句,该语句将数据插入到链接表中。
    问号(?)是占位符,将由title,url和target的相应值替换。
    我们将INSERT语句传递给prepare()方法以准备执行。

  • 之后,我们迭代@links数组并执行INSERT语句。
    我们显示了一条消息,用于指定是否将数据成功插入到链接表中。

  • 最后,我们通过调用数据库句柄对象的disconnect()方法与MySQL数据库断开连接。

下面说明了当我们在链接表中插入4行时的输出。

Perl MySQL INSERT Demo
title:
MySQL Tutorial
url:
httpx://www.onitroad.local/
target:
_self
Do you want to insert another link? (Y/N)?Y
title:
Perl MySQL Insert Demo
url:
httpx://www.onitroad.local/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://onitroad.local/ inserted successfully
link https://www.onitroad.local/perl-mysql/perl-mysql-insert/ inserted successfully
link http://www.perl.org inserted successfully
link http://www.mysql.com inserted successfully

我们可以检查链接表以验证插入操作:

SELECT * FROM links;

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

日期:2019-11-20 08:52:38 来源:oir作者:oir