摘要:在本教程中,我们将逐步向您展示如何使用 Perl DBI 将数据插入表中。
我们将使用Perl MySQL 创建表教程中创建的links
表。如果您尚未创建links
表,我们强烈建议您在继续本教程之前创建它。
要使用 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 插入示例
以下脚本允许您将数据插入链接表中:
#!/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 successfully
Code language: PHP (php)
我们可以检查links
表来验证插入操作:
SELECT * FROM links;
Code language: SQL (Structured Query Language) (sql)
在本教程中,您学习了如何使用 Perl DBI 将数据插入 MySQL 数据库表中。
本教程有帮助吗?