Username: Password:

Linux环境下Perl语言对数据库的操纵
来源:linux宝库作者:linux宝库 发布时间:2007-09-30 00:00:00


  实例:同一主机下的运行

  主机配置:PIII450 128M 15GB

  操作系统:Red Hat Linux 6.1

  数据库:MySQL-3.22.29

  建议使用RPM方式安装,至少要安装下面三个包:

  MySQL-3.22.29-1.i386.rpm

  MySQL-client-3.22.29-1.i386.rpm

  MySQL-devel-3.22.29-1.i386.rpm

  WWW服务器:Apache 1.3.6 for Linux

  Perl 解释器:version 5.005_03 built for i386-linux

  DBI: 版本为:1.13

  Data-ShowTable: 版本为:3.3

  DBD: Msql-Mysql-modules-1.2018

  本人成功地在上述环境下实现了对MySQL数据库的访问。和Windows环境下的数据库不同,他无需建立外部数据源.

  下面是个应用的简单例子:

  为了统计用户访问我们的网站的次数,我们建立了一个数据库, 在其中建一个表,表名为:usedata, 共有三列:userno,userpass,lognum,分别代表用户名,密码,登录次数.

  假定我们使用test数据库,在该库中创建表usedata, 我们既能够编一个PERL程式实现,也能够在命令行方式下实现:

  #mysql test

  >CREATE TABLE usedata(userno CHAR(8) NOT NULL, usepass CHAR(8) NOT NULL, lognum INT);

  >exit

  共有两个htm文档,两个pl文档.

  regist.htm

  

  
  content="text/html; charset=gb_2312-80">

  

  注册

  

  

  

用户在线注册


  



  


  

  
用户名

  
密码

  


  
  value="注册">


  


  

  

  login.htm

  

  
  content="text/html; charset=gb_2312-80">

  

  登录

  

  

  

用户在线登录


  



  


  

  
用户名

  
密码

  


  
  value="登录">


  


  

  

  regist.pl #!/usr/bin/perl

  # regist.pl

  

read(STDIN, $buffer, $ENV{’CONTENT_LENGTH’});

  @pairs = split(/&/, $buffer);

  foreach $pair (@pairs) {

  ($name, $value) = split(/=/, $pair);

  $value =~ tr/+/ /;

  $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

  $value =~ s///g;

  $value=~ s/<([^>]|\n)*>//g;

  $value=~ s/>/>/g;

  $value=~ s/
  $FORM{$name} = $value;

  }

  

print "Content-type: text/html\n\n";

  

print "注册\n";

  

print "\n";

  



  if ($FORM{’IDNO’} eq "")

  {

  print<
  

用户名不能为空!

  返回前页修改

  


  EOF

  exit(0);

  }

  

if ($FORM{’PASS’} eq "")

  {

  print<
  

密码不能为空!

  返回前页修改

  


  EOF

  exit(0);

  }

  

$host= shift || "";

  $test_db="test";

  $opt_user=$opt_password="";

  

use DBI;

  

$|= 1; # Autoflush

  

$table="usedata";

  

$dbh = DBI->connect("DBI:mysql:$test_db:$host",$opt_user,$opt_password) || die "Can’t connect: $DBI::errstr\n";

  

$n1 = $FORM{’IDNO’};

  

$sth=$dbh->prepare("select * from usedata where userno=$n1 ") or die $dbh->errstr;

  

$sth->execute() or die $sth->errstr;

  

if (($row = $sth->fetchrow_arrayref))

  {

  $dbh->disconnect();

  print<
  

用户名已存在!

  返回前页修改

  


  EOF

  exit(0);

  }

  $n2 = $FORM{’PASS’};

  $n3 = 1;

  $dbh->do("insert into $table values($n1, $n2,$n3)") or die $DBI::errstr;

  

$dbh->disconnect();

  print<
  

您已注册成功!


  

  EOF

  exit(0);

  

login.pl #!/usr/bin/perl

  # login.pl

  

read(STDIN, $buffer, $ENV{’CONTENT_LENGTH’});

  @pairs = split(/&/, $buffer);

  foreach $pair (@pairs) {

  ($name, $value) = split(/=/, $pair);

  $value =~ tr/+/ /;

  $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

  $value =~ s///g;

  $value=~ s/<([^>]|\n)*>//g;

  $value=~ s/>/>/g;

  $value=~ s/
  $FORM{$name} = $value;

  }

  

print "Content-type: text/html\n\n";

  

print "登录\n";

  

print "\n";

  



  if ($FORM{’IDNO’} eq "")

  {

  print<
  

用户名不能为空!

  返回前页修改

  


  EOF

  exit(0);

  }

  

if ($FORM{’PASS’} eq "")

  {

  print<
  

密码不能为空!

  返回前页修改

  


  EOF

  exit(0);

  }

  

$host= shift || "";

  $test_db="test";

  $opt_user=$opt_password="";

  use DBI;

  $|= 1; # Autoflush

  

$table="usedata";

  

$dbh = DBI->connect("DBI:mysql:$test_db:$host",$opt_user,$opt_password) || die "Can’t connect: $DBI::errstr\n";

  

$n1 = $FORM{’IDNO’};

  $sth=$dbh->prepare("select * from usedata where userno=$n1 ") or die $dbh->errstr;

  

$sth->execute() or die $sth->errstr;

  if (($row = $sth->fetchrow_arrayref))

  {

  if ($row->[1] eq $FORM{’PASS’})

  {

  $NUM = $row->[2]+1;

  $sth=$dbh->prepare("UPDATE usedata SET lognum=$NUM where userno=$n1 ") or die $dbh->errstr;

  $sth->execute() or die $sth->errstr; print<
  

您第 $NUM 次登录!


  EOF

  }

  else

  {

  print<
  
密码不正确!

  返回前页修改

  


  EOF

  }

  }

  else

  {

  print<
  
用户名不正确!

  返回前页修改

  


  EOF

  }

  $dbh->disconnect();

  print <
  

  EOF

  exit(0);

喜欢本文,那就收藏到:

    Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网
相关评论  我也要评论
还没有关于此文章的相关评论!
  • 昵称: (为空则显示guest)
  • 评论分数: ★ ★ ★★★ ★★★★ ★★★★★
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
  • 导航
    赞助商
    文章类别
    订阅