实例:同一主机下的运行
主机配置: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>
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器