📜  Perl DBI

📅  最后修改于: 2021-01-07 08:39:07             🧑  作者: Mango

Perl DBI

在本教程中,我们将在Perl脚本中看到数据库访问。从Perl 5开始,数据库应用程序使用DBI模块访问数据库。

使用DBI模块在Perl脚本中访问数据库。 DBI (数据库独立接口)在Perl代码和数据库之间提供了一个抽象层。

DBI是一个数据库访问模块,它提供变量,用于一致数据库接口的方法集,而与所使用的实际数据库无关。

Perl DBI体系结构

DBI独立于数据库,可与Oracle,MySQL等一起使用。DBI通过API(应用程序编程接口)获取所有SQL命令,并将它们转发给适当的驱动程序以执行。

Perl DBI连接

我们正在使用MySQL数据库。启动您的MySQL服务器。现在完成以下步骤:

  • 创建一个数据库。我们的数据库名称是“ perll”。
  • 在此数据库内创建一个表。我们创建了一个具有“名称”,“课程”和“费用”字段的“用户”表。
  • 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操作,我们会将记录传递到数据库表“ 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()函数一一读取并print所有结果。
  • 使用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。

按着这些次序:

  • 使用带有条件的SQL UPDATE语句使用API prepare()函数。
  • 使用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删除数据库

执行DE#LETE操作以从数据库中删除一些记录。我们将从表格中删除费用为9000的所有记录。

按着这些次序:

  • 使用带有条件的SQL DELETE语句使用API prepare()函数。
  • 使用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

查看输出,从SQL表中删除所有费用为9000的行。

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所有句柄的常用方法

$rv = $h->err;

它从最后一个称为的驱动程序方法返回本机数据库引擎错误代码,该方法通常是整数。

在所有DBI方法调用之前,DBI会将$ h-> err重置为undef,因此该值的寿命很短。

错误

$str = $h->errstr;

它从最后一个调用的DBI方法返回本机数据库引擎错误消息。这具有smae寿命作为err方法。返回的值可以包含多个消息分隔NY新行字符。

要测试错误,应使用err方法。因为errstr方法可能会为未失败的方法返回成功或警告消息。

跟踪

$h->trace($trace_settings);

DBI跟踪方法生成运行时跟踪信息,该信息可用于跟踪DBI程序中的问题。可以将不同的值设置为跟踪级别。

行数

$rv = $h->rows;

rows方法返回以前的SQL语句影响的行数。