中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > 综合其它
Linux环境下Perl语言对数据库的操纵
作者:netbull 时间:2007-09-14 17:19 出处:蓝森林 责编:月夜寒箫
              摘要:Linux环境下Perl语言对数据库的操纵
实例:同一主机下的运行

主机配置: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程序实现,也可以在命令行方式下实现:

<br>

#mysql test<br>

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

>exit<br>

共有两个htm文件,两个pl文件. <br>

regist.htm <html><br>

<head><br>

<meta http-equiv=\"Content-Type\"<br>

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

<meta name=\"GENERATOR\" content=\"Microsoft FrontPage Express 2.0\"><br>

<title>注册</title><br>

</head><br>

<body><br>

<p><center><font color=ff3380>用户在线注册</font></center><br>

</p><br>

<form action=\"/cgi-bin/database/regist.pl\" method=\"POST\"><br>

<table border=\"0\"> <br>

<td valign=\"top\"><font color=\"#400080\">用户名<input type=text name=\IDNO\ size=4 maxlength=8></font><br>

<td valign=\"top\"><font color=\"#400080\">密码<input type=password name=\PASS\ size=6 maxlength=8></font><br>

</table><br>

<font color=\"#0080C0\"><input type=\"submit\"<br>

value=\"注册\"> <input type=\"reset\" value=\"清除\"> </font><br>

</form><br>

</body><br>

</html> <br>

login.htm <html><br>

<head><br>

<meta http-equiv=\"Content-Type\"<br>

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

<meta name=\"GENERATOR\" content=\"Microsoft FrontPage Express 2.0\"><br>

<title>登录</title><br>

</head><br>

<body><br>

<p><center><font color=ff3380>用户在线登录</font></center><br>

</p><br>

<form action=\"/cgi-bin/database/login.pl\" method=\"POST\"><br>

<table border=\"0\"> <br>

<td valign=\"top\"><font color=\"#400080\">用户名<input type=text name=\IDNO\ size=4 maxlength=8></font><br>

<td valign=\"top\"><font color=\"#400080\">密码<input type=password name=\PASS\ size=6 maxlength=8></font><br>

</table><br>

<font color=\"#0080C0\"><input type=\"submit\"<br>

value=\"登录\"> <input type=\"reset\" value=\"清除\"> </font><br>

</form><br>

</body><br>

</html> <br>

regist.pl #!/usr/bin/perl<br>

# regist.pl

<p>read(STDIN, $buffer, $ENV{\CONTENT_LENGTH\});<br>

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

foreach $pair (@pairs) {<br>

($name, $value) = split(/=/, $pair);<br>

$value =~ tr/+/ /;<br>

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

$value =~ s/<!--(.|\\n)*-->//g;<br>

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

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

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

$FORM{$name} = $value;<br>

}

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

<p>print \"<HTML><HEAD><TITLE>注册</TITLE></HEAD>\\n\";

<p>print \"<body bgcolor=#FFFFFF>\\n\";

<p><br>

if ($FORM{\IDNO\} eq \"\")<br>

{<br>

print<<EOF;<br>

<center><font color=red>用户名不能为空!</font><br>

返回<a href=\javascript:history.go(-1);\>前页</a>修改<br>

</center><br>

EOF<br>

exit(0);<br>

}

<p>if ($FORM{\PASS\} eq \"\")<br>

{<br>

print<<EOF;<br>

<center><font color=red>密码不能为空!</font><br>

返回<a href=\javascript:history.go(-1);\>前页</a>修改<br>

</center><br>

EOF<br>

exit(0);<br>

}

<p>$host= shift || \"\";<br>

$test_db=\"test\";<br>

$opt_user=$opt_password=\"\";

<p>use DBI;

<p>$|= 1; # Autoflush

<p>$table=\"usedata\";

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

<p>$n1 = $FORM{\IDNO\};

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

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

<p>if (($row = $sth->fetchrow_arrayref))<br>

{<br>

$dbh->disconnect();<br>

print<<EOF;<br>

<center><font color=red>用户名已存在!</font><br>

返回<a href=\javascript:history.go(-1);\>前页</a>修改<br>

</center><br>

EOF<br>

exit(0);<br>

}<br>

$n2 = $FORM{\PASS\};<br>

$n3 = 1;<br>

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

<p>$dbh->disconnect();<br>

print<<EOF;<br>

<center>您已注册成功!</center><br>

</BODY></HTML><br>

EOF<br>

exit(0);

<p>login.pl #!/usr/bin/perl<br>

# login.pl

<p>read(STDIN, $buffer, $ENV{\CONTENT_LENGTH\});<br>

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

foreach $pair (@pairs) {<br>

($name, $value) = split(/=/, $pair);<br>

$value =~ tr/+/ /;<br>

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

$value =~ s/<!--(.|\\n)*-->//g;<br>

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

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

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

$FORM{$name} = $value;<br>

}

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

<p>print \"<HTML><HEAD><TITLE>登录</TITLE></HEAD>\\n\";

<p>print \"<body bgcolor=#FFFFFF>\\n\";

<p><br>

if ($FORM{\IDNO\} eq \"\")<br>

{<br>

print<<EOF;<br>

<center><font color=red>用户名不能为空!</font><br>

返回<a href=\javascript:history.go(-1);\>前页</a>修改<br>

</center><br>

EOF<br>

exit(0);<br>

}

<p>if ($FORM{\PASS\} eq \"\")<br>

{<br>

print<<EOF;<br>

<center><font color=red>密码不能为空!</font><br>

返回<a href=\javascript:history.go(-1);\>前页</a>修改<br>

</center><br>

EOF<br>

exit(0);<br>

}

<p>$host= shift || \"\";<br>

$test_db=\"test\";<br>

$opt_user=$opt_password=\"\";<br>

use DBI;<br>

$|= 1; # Autoflush

<p>$table=\"usedata\";

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

<p>$n1 = $FORM{\IDNO\};<br>

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

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

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

{<br>

if ($row->[1] eq $FORM{\PASS\})<br>

{<br>

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

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

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

<center>您第 $NUM 次登录!</center><br>

EOF<br>

}<br>

else<br>

{<br>

print<<EOF; <br>

<center><font color=red>密码不正确!</font><br>

返回<a href=\javascript:history.go(-1);\>前页</a>修改<br>

</center><br>

EOF<br>

}<br>

}<br>

else<br>

{<br>

print<<EOF; <br>

<center><font color=red>用户名不正确!</font><br>

返回<a href=\javascript:history.go(-1);\>前页</a>修改<br>

</center><br>

EOF<br>

}<br>

$dbh->disconnect();<br>

print <<EOF;<br>

</body></html><br>

EOF<br>

exit(0); <br>
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有