Perl教程
Perl控制语句
Perl高级

Perl DBI

Perl DBI

在本教程中,我们将在 Perl 脚本中看到数据库访问。从 Perl 5 开始,数据库应用程序使用 DBI 模块访问数据库。
使用 DBI 模块在 Perl 脚本中访问数据库。 DBI(Database Independent Interface),在 Perl 代码和数据库之间提供了一个抽象层。
DBI 是一个数据库访问模块,它提供变量,一组方法以实现一致的数据库接口, 独立于实际使用的数据库。

Perl DBI 架构

Perl 数据库访问 1
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

$rv = $h->err;
它从上次调用的驱动程序方法返回本机数据库引擎错误代码,通常是一个整数。
DBI 在所有 DBI 方法调用之前将 $h->err 重置为 undef,因此该值具有寿命短。

errstr

$str = $h->errstr;
它从上次调用的 DBI 方法返回本机数据库引擎错误消息。这具有 smae 寿命作为 err 方法。返回值可能包含多条消息,以 ny 换行符分隔。
要测试错误,应使用 err 方法。因为 errstr 方法可能会为没有失败的方法返回成功或警告消息。

trace

$h->trace($trace_settings);
DBI 跟踪方法生成运行时跟踪信息,可用于跟踪 DBI 程序中的问题。可以为跟踪级别设置不同的值。

rows

$rv = $h->rows;
rows 方法返回受先前 SQL 语句影响的行数。
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4