使用Perl DBI接口连接MySQL

本文可自由转载,但请遵循“署名-非商业用途-保持一致”的创作共用协议。 永久链接:JoeCen's 小猫窝
-----------------------------

为什么不用PHP?因为Perl仍然是被广泛使用的语言。我也喜欢使用作为标准的语言。Perl拥有大量的在线文档,关于Perl的著作也多如牛毛。不得不提CPAN,Perl的宝库,在这里你可以找到几乎所有你想要的模块,如DBI。DBI提供一个接口,无论是“原始”CSV格式(用逗号分隔数值的文本文件)还是最高级的Oracle RDBMS,均能使用这个接口连接。

让我们开始连接数据库:

-------------------------------------------------------------------------
use DBI;

my $dsn = 'DBI:mysql:my_database:localhost';
my $db_user_name = 'admin';
my $db_password = 'secret';
my ($id, $password);
my $dbh = DBI->connect($dsn, $db_user_name, $db_password);

-------------------------------------------------------------------------

我们假设我们收到登陆界面上的一个表单的输入,里面包含一个用户名和密码,像这样:

-------------------------------------------------------------------------
$input_nickname = 'Cowlick' and $input_password = 'udder'
-------------------------------------------------------------------------

我们需要验证改用户的密码是否与我们数据库中的数据匹配:

-------------------------------------------------------------------------
my $sth = $dbh->prepare(qq{
select id, password from users
where nickname = $input_nickname
});
$sth->execute();

-------------------------------------------------------------------------
注意SQL语句中并不包含命令终结符“;”。

我们如何得到结果呢?我们只有一行的答复:

-------------------------------------------------------------------------
($id, $password) = $sth->fetchrow_array();
$sth->finish(): # 结束这次查询
if ($input_password eq $password) # 大小写敏感
{
... # 登陆成功!
}

-------------------------------------------------------------------------
那么,如果我们查询的结果多于一行的话怎么办呢?可以用下面的方法:


-------------------------------------------------------------------------
$sth->fetchrow_array()
-------------------------------------------------------------------------
如:

-------------------------------------------------------------------------
my $sth = $dbh->prepare(qq{
select nickname, favorite_number from users
});
$sth->execute();
while (my ($nickname, $favorite_number) =
$sth->fetchrow_array()) # 递归直到array完结

{
print "$nickname, $favorite_number\n";
}
$sth->finish();

我们也可以将查询的结果保存:

my (@matrix) = ();
while (my @ary = $sth->fetchrow_array())
{
push(@matrix, [@ary]); # [@ary] is a reference
}
$sth->finish();

-------------------------------------------------------------------------
A reference, for C programers, can be thought of as a pointer. The Matrix is now an array of array references, or a two-dimensional array.

你可以用$i得到 row:

-------------------------------------------------------------------------
@{matrix[$i]}
-------------------------------------------------------------------------
或者,你可以用($i, $j) 指定row and column :

-------------------------------------------------------------------------
$matrix[$i][$j]
-------------------------------------------------------------------------
对于一个没有返回值的MySQL上的操作,可以使用“do”方法取代“execute”方法:

-------------------------------------------------------------------------
$dbh->do("insert into message_votes
(message_id, user_id, vote) values (1, 3, 'good')");

-------------------------------------------------------------------------
最后是与数据库断开:

-------------------------------------------------------------------------
$dbh->disconnect();
-------------------------------------------------------------------------
这应该足够让你开始使用DBI了。

原文:http://www.danchan.com/feature/2000/10/16/mysql/mysql3.htm

有删节。

随机日志

  • 回复tao:中国开源技术之我见
  • 使用Cacti监测系统与网络性能_5
  • 不想入睡
  • 配置msmtp,字符界面下使用smtp发邮件
  • 找到syn flood的代码了
  • Leave a Reply