Perl DBI
Perl DBI
在本教程中,我们将在 Perl 脚本中看到数据库访问。从 Perl 5 开始,数据库应用程序使用 DBI 模块访问数据库。
使用 DBI 模块在 Perl 脚本中访问数据库。 DBI(Database Independent Interface),在 Perl 代码和数据库之间提供了一个抽象层。
DBI 是一个数据库访问模块,它提供变量,一组方法以实现一致的数据库接口, 独立于实际使用的数据库。
Perl DBI 架构
DBI 独立于数据库,可以与 Oracle、MySQL 等一起使用。DBI 通过 API(应用程序编程接口)获取所有 SQL 命令,并将它们转发给相应的驱动程序执行。
Perl DBI 连接
我们正在使用 MySQL 数据库。启动你的 MySQL 服务器。现在完成以下步骤:
创建数据库。我们的数据库名称是"perll"。
在此数据库中创建一个表。我们创建了一个"users"表,其中包含"name"、"course"和"fee"字段。
Perl 模块 DBI 应该正确安装。
成功创建数据库后,使用以下脚本将此数据库与Perl文件连接。
#!/usr/bin/perl
use strict;
use warnings;
use DBI;
my $driver = "mysql";
my $database = "perll";
my $dsn = "dbi:$driver:database=$database";
my $user = "root";
my $password = "";
my $dbh = DBI->connect($dsn, $user, $password, {
PrintError => 0,
RaiseError => 1,
AutoCommit => 1,
FetchHashKeyName => 'NAME_lc',
});
$dbh->disconnect;
看上面的脚本,
dsn-> 数据库源名称
dbh-> 数据库句柄对象
dsn 包含正在加载的数据库。用户是"root",我们还没有为我们的数据库设置任何密码。
dbh 存储数据库句柄对象调用返回。
数据库断开命令是可选的,它会自动当 $dbh 超出范围时调用。
Perl INSERT into Database
通过 INSERT 操作,我们将记录传递到我们的数据库表"users"中。以下脚本允许在数据库中插入单个记录。您可以使用相同的脚本插入多条记录。
请按照以下步骤操作:
将 API prepare() 函数与 SQL 插入语句一起使用。
使用 API execute() 函数从数据库中选择所有结果。
使用 API finish() 函数关闭代码。
my $sth=$dbh->prepare("insert into users(name, course, fee) values('john', 'PHP', '9000')");
$sth->execute();
$sth->finish();
Perl 插入绑定值
绑定值用于在运行时需要的值。要插入数据,我们调用 $dbh->do 方法。在这里,我们将(?) 作为占位符传递给实际数据。接着是 undef,然后是包含将替换占位符的数据的值。
my $name = 'nisha';
my $course = 'java',
my $fee = '10000';
$dbh->do('INSERT INTO users (name, course, fee) VALUES (?, ?, ?)',
undef,
$name, $course, $fee);
输出:
Name = John, Course = PHP, Fee = 9000
Name = nisha, Course = Java, Fee = 10000
Perl READ 数据库
READ 记录用于从数据库中获取信息。一旦我们将一些记录插入到我们的数据库中,我们就可以使用 READ 查询来获取这些记录。
按照以下步骤:
将 API prepare() 函数与 SQL SELECT 语句一起使用。
使用 API execute() 函数从数据库中选择所有结果。
使用 API fetchrow_array() 函数将所有结果一一获取并打印。
使用 API finish() 函数关闭代码。
# Fetching records from database
my $sth = $dbh->prepare("SELECT * FROM users");
$sth->execute() or die $DBI::errstr;
while (my @row = $sth->fetchrow_array()) {
my ($name, $course, $fee) = @row;
print"Name = $name, Course = $course, Fee = $fee\n";
}
$sth->finish();
注意: 我们在表中插入了更多的值来执行操作。
输出:
Name = John, Course = PHP, Fee = 9000
Name = nisha, Course = Java, Fee = 10000
Name = Jia, Course = C++, Fee = 8000
Name = Anuj, Course = Java, Fee = 5000
Name = Vishal, Course = PHP, Fee = 8000
Name = Rash, Course = Hadoop, Fee = 4000
Perl UPDATE 数据库
借助UPDATE操作,您可以编辑数据库表中存在的信息。
这里我们将将所有在课程中使用"Java"的学生的"课程"列更新为 PHP。
请按照以下步骤操作:
将 API prepare() 函数与具有所需条件的 SQL UPDATE 语句一起使用。
使用 API execute() 函数从数据库中选择所有结果。
使用 API finish() 函数关闭代码。
my $sth = $dbh->prepare("UPDATE users SET course = 'PHP' WHERE course = 'Java'");
$sth->execute() or die $DBI::errstr;
$sth->finish();
输出:
Name = John, Course = PHP, Fee = 9000
Name = nisha, Course = PHP, Fee = 10000
Name = Jia, Course = C++, Fee = 8000
Name = Anuj, Course = PHP, Fee = 5000
Name = Vishal, Course = PHP, Fee = 8000
Name = Rash, Course = Hdoop, Fee = 4000
看输出,Java课程全部更新为PHP。
Perl DELETE 数据库
DE#LETE 操作用于从数据库中删除一些记录。我们将删除表中费用为 9000 的所有记录。
按照以下步骤操作:
将 API prepare() 函数与具有所需条件的 SQL DELETE 语句一起使用。
使用 API execute() 函数从数据库中选择所有结果。
使用 API finish() 函数关闭代码。
my $fee = 9000;
my $sth = $dbh->prepare("DELETE FROM users
WHERE fee = ?");
$sth->execute( $fee ) or die $DBI::errstr;
$sth->finish();
输出:
Name = nisha, Course = PHP, Fee = 10000
Name = Jia, Course = C++, Fee = 8000
Name = Anuj, Course = PHP, Fee = 5000
Name = Vishal, Course = PHP, Fee = 8000
Name = Rash, Course = Hdoop, Fee = 4000
看输出,所有fee为9000的行都从SQL表中删除了。
Perl DBI 函数
使用 do 语句
do 语句是执行 CRUD 的快捷方式 数据库中的操作。如果 do 语句成功,则返回 TRUE,如果失败,则返回 FALSE。以下是显示 do 语句脚本的示例。
To INSERT Record,
$dbh->do('INSERT INTO users (name, course, fee) VALUES (?, ?, ?)',
undef,
$name, $course, $fee);
To UPDATE Record,
$dbh->do('UPDATE users SET course = "PHP" WHERE course = "Java"'
undef,
$course,
$course);
To DELETE Record,
$dbh->do('DELETE FROM users WHERE fee =9000');
使用 COMMIT 操作
一旦您给出了 commit 命令,您就无法取回您所做的更改。您可以通过以下方式调用 commit 命令,
$dbh->commit or die $dbh->errstr;
使用 ROLLBACK 操作
如果要还原操作期间所做的更改,可以调用回滚 API。
$dbh->commit or die $dbh->errstr;
使用自动错误处理
通过指定 RaiseError 选项,您的错误将由 DBI 自动处理。您的程序将在遇到错误而不是运行失败代码时中止。 RaiseError 的值可以是 1 或 0。
my $dbh = DBI->connect($dsn, $user, $password,
{ RaiseError => 1 })
or die $DBI::errstr;
Perl 所有句柄的通用方法
err
它从上次调用的驱动程序方法返回本机数据库引擎错误代码,通常是一个整数。
DBI 在所有 DBI 方法调用之前将 $h->err 重置为 undef,因此该值具有寿命短。
errstr
它从上次调用的 DBI 方法返回本机数据库引擎错误消息。这具有 smae 寿命作为 err 方法。返回值可能包含多条消息,以 ny 换行符分隔。
要测试错误,应使用 err 方法。因为 errstr 方法可能会为没有失败的方法返回成功或警告消息。
trace
$h->trace($trace_settings);
DBI 跟踪方法生成运行时跟踪信息,可用于跟踪 DBI 程序中的问题。可以为跟踪级别设置不同的值。
rows
rows 方法返回受先前 SQL 语句影响的行数。