Perl 连接到 MySQL 数据库

网友投稿 802 2023-04-09

Perl 连接到 MySQL 数据库

Perl 连接到 MySQL 数据库

使用 Perl 连接到 MySQL 数据库,本章将展示如何创建与数据库的连接。

第一步是连接到数据库。 我们使用connect() DBI 方法建立连接。 disconnect()方法用于关闭数据库连接。

$dbh = DBI->connect($dsn, $username, $password)    or die $DBI::errstr;$dbh = DBI->connect($dsn, $username, $password, \%attr)    or die $DBI::errstr;

connect()方法建立与请求的数据源的数据库连接。 如果连接成功,它将返回数据库句柄对象。 我们使用disconnect()方法终止连接。

$dsn是数据源名称。 它是一个字符串,告诉 Perl DBI 模块,应加载哪种驱动程序以及将要建立连接的数据库的位置。

dbi:DriverName:database_namedbi:DriverName:database_name@hostname:portdbi:DriverName:database=database_name;host=hostname;port=port

上面的字符串是 Perl DBI 中数据源名称的示例。

dbi:mysql:dbname=mydb

我们将使用此数据源名称。 dsn始终以dbi:子字符串开头。 然后我们有驱动程序名称。 在我们的情况下,驱动程序名称为mysql。 第三部分是数据库名称。 在本教程中,我们将使用mydb。

$username和$password是身份验证所需的用户名和密码。 最后一个参数是对哈希的引用,在哈希中,我们可以设置属性以更改连接的默认设置。 例如,RaiseError 属性可用于强制错误引发异常,而不是返回错误代码。 HandleError属性可用于提供子程序,以防发生错误。 AutoCommit 属性设置或取消设置自动提交模式。

$DBI::errstr是一个 DBI 动态属性,它返回本地数据库引擎错误消息。 如果连接失败,则会显示此消息,并且脚本将中止。

版本

在第一个代码示例中,我们将获取 MySQL 数据库的版本。

#!/usr/bin/perluse strict;use DBI;my $dbh = DBI->connect(              "dbi:mysql:dbname=mydb",     "user12",                              "34klq*",                              { RaiseError => 1 },         ) or die $DBI::errstr;my $sth = $dbh->prepare("SELECT VERSION()");$sth->execute();my $ver = $sth->fetch();print @$ver;print "\n";$sth->finish();$dbh->disconnect();

在上面的 Perl 脚本中,我们连接到先前创建的mydb数据库。 我们执行一条 SQL 语句,该语句返回 MySQL 数据库的版本。

use DBI;

我们使用 Perl DBI 模块连接到 MySQL 数据库。

my $dbh = DBI->connect(              "dbi:mysql:dbname=mydb",     "user12",                              "34klq*",                              { RaiseError => 1 },         ) or die $DBI::errstr;

在这里,我们连接到mydb数据库。 第一个参数是数据源名称。 在字符串中,我们指定数据库驱动程序和数据库名称。 第二个参数是用户名。 第三个参数是用户密码。 最后一个参数是数据库选项。 我们将RaiseError选项设置为 1。这将导致引发异常,而不是返回错误代码。

my $sth = $dbh->prepare("SELECT VERSION()");$sth->execute();

prepare()方法准备一条 SQL 语句供以后执行。 execute()方法执行 SQL 语句。

my $ver = $sth->fetch();

我们获取数据。

print @$ver;print "\n";

我们将检索到的数据打印到控制台。

$sth->finish();

在这里,我们指示将不再从此语句句柄中获取任何数据。

$dbh->disconnect();

我们关闭与数据库的连接。

$ ./version.pl5.1.62-0ubuntu0.11.10.1

执行 verion.pl 脚本,我们得到 MySQL 数据库的版本。

插入数据

我们将创建一个Cars表并在其中插入几行。

#!/usr/bin/perluse strict;use DBI;my $dbh = DBI->connect(              "dbi:mysql:dbname=mydb",     "user12",    "34klq*",    { RaiseError => 1}) or die $DBI::errstr;$dbh->do("DROP TABLE IF EXISTS Cars");$dbh->do("CREATE TABLE Cars(Id INT PRIMARY KEY, Name TEXT, Price INT) ENGINE=InnoDB");$dbh->do("INSERT INTO Cars VALUES(1,'Audi',52642)");$dbh->do("INSERT INTO Cars VALUES(2,'Mercedes',57127)");$dbh->do("INSERT INTO Cars VALUES(3,'Skoda',9000)");$dbh->do("INSERT INTO Cars VALUES(4,'Volvo',29000)");$dbh->do("INSERT INTO Cars VALUES(5,'Bentley',350000)");$dbh->do("INSERT INTO Cars VALUES(6,'Citroen',21000)");$dbh->do("INSERT INTO Cars VALUES(7,'Hummer',41400)");$dbh->do("INSERT INTO Cars VALUES(8,'Volkswagen',21600)");$dbh->disconnect();

上面的脚本创建一个Cars表,并将 8 行插入到该表中。

$dbh->do("CREATE TABLE Cars(Id INT PRIMARY KEY, Name TEXT, Price INT) ENGINE=InnoDB");

do()方法执行 SQL 语句。 它将两个方法调用prepare()和execute()组合为一个调用。 do()方法用于非选择语句。

$dbh->do("INSERT INTO Cars VALUES(1,'Audi',52642)");$dbh->do("INSERT INTO Cars VALUES(2,'Mercedes',57127)");

这两行将两辆车插入桌子。 请注意,默认情况下,我们处于 自动提交模式,其中对表的所有更改均立即生效。

mysql> SELECT * FROM Cars;+----+------------+--------+| Id | Name       | Price  |+----+------------+--------+|  1 | Audi       |  52642 ||  2 | Mercedes   |  57127 ||  3 | Skoda      |   9000 ||  4 | Volvo      |  29000 ||  5 | Bentley    | 350000 ||  6 | Citroen    |  21000 ||  7 | Hummer     |  41400 ||  8 | Volkswagen |  21600 |+----+------------+--------+8 rows in set (0.01 sec)

这是我们已写入Cars表的数据。

最后插入的行 ID

有时,我们需要确定最后插入的行的 ID。 在 Perl DBI 中,我们使用last_insert_id()方法进行查找。

#!/usr/bin/perluse strict;use DBI;my $dbh = DBI->connect(              "dbi:mysql:dbname=mydb",     "user12",                              "34klq*",                              { RaiseError => 1 },         ) or die $DBI::errstr;$dbh->do("DROP TABLE IF EXISTS Friends");$dbh->do("CREATE TABLE Friends(Id INTEGER PRIMARY KEY AUTO_INCREMENT, Name TEXT)");$dbh->do("INSERT INTO Friends(Name) VALUES ('Tom')");$dbh->do("INSERT INTO Friends(Name) VALUES ('Rebecca')");$dbh->do("INSERT INTO Friends(Name) VALUES ('Jim')");$dbh->do("INSERT INTO Friends(Name) VALUES ('Robert')");$dbh->do("INSERT INTO Friends(Name) VALUES ('Julian')");my $id = $dbh->last_insert_id("", "", "Friends", "");print "The last Id of the inserted row is $id\n";$dbh->disconnect();

我们创建一个新的Friends表。 Id自动递增。

$dbh->do("CREATE TABLE Friends(Id INTEGER PRIMARY KEY AUTO_INCREMENT, Name TEXT)");

这是创建 Friends 表的 SQL 语句。 AUTO_INCREMENT属性用于为新行生成唯一的 ID。

$dbh->do("INSERT INTO Friends(Name) VALUES ('Tom')");$dbh->do("INSERT INTO Friends(Name) VALUES ('Rebecca')");$dbh->do("INSERT INTO Friends(Name) VALUES ('Jim')");$dbh->do("INSERT INTO Friends(Name) VALUES ('Robert')");$dbh->do("INSERT INTO Friends(Name) VALUES ('Julian')");

这五个 SQL 语句将五行插入到Friends表中。

my $id = $dbh->last_insert_id("", "", "Friends", "");

使用last_insert_id()方法,我们获得最后插入的行 ID。

$ ./last_rowid.plThe last Id of the inserted row is 5

我们看到了脚本的输出。

取得数据

在本章的最后一个示例中,我们获取一些数据。 有关数据获取的更多信息将在“查询”一章中进行讨论。

#!/usr/bin/perluse strict;use DBI;my $dbh = DBI->connect(              "dbi:mysql:dbname=mydb",     "user12",                              "34klq*",                              { RaiseError => 1 },         ) or die $DBI::errstr;my $sth = $dbh->prepare( "SELECT * FROM Cars WHERE Id=1" );  $sth->execute();my ($id, $name, $price) = $sth->fetchrow();print "$id $name $price\n";my $fields = $sth->{NUM_OF_FIELDS};print "We have selected $fields field(s)\n";my $rows = $sth->rows();print "We have selected $rows row(s)\n";$sth->finish();$dbh->disconnect();

在示例中,我们从Cars表中获取一行。 我们还将找出我们选择了多少字段&行。

my $sth = $dbh->prepare( "SELECT * FROM Cars WHERE Id=1" );  $sth->execute();

我们使用prepare()方法准备一条 SQL 语句。 SQL 字符串被发送到 MySQL 数据库引擎进行处理。 检查其语法和有效性。 该方法返回一个语句句柄。 然后执行 SQL 语句。 准备将数据发送到客户端程序。

my ($id, $name, $price) = $sth->fetchrow();print "$id $name $price\n";

使用fetchrow()方法从数据库中检索数据。 该方法以 Perl 列表的形式从表中返回一行。

my $fields = $sth->{NUM_OF_FIELDS};

NUM_OF_FIELDS是一个语句句柄属性,它为我们提供了返回字段的数量。 在我们的情况下,我们返回了三个字段:Id,Name和Price。

my $rows = $sth->rows();

我们得到选定的行数。 我们仅从表中检索到一行。 rows()方法返回受影响的行数。 它可以用于SELECT,UPDATE和DELETE SQL 语句。

$ ./fetchrow.pl1 Audi 52642We have selected 3 field(s)We have selected 1 row(s)

fetchrow.pl 脚本的输出。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:MySQL 中的 Perl 错误处理
下一篇:MySQL Perl DBI
相关文章