Apache 配置CGI脚本操作数据库之Perl操作

来源:互联网 发布:网络上关于兄弟的歌曲 编辑:程序博客网 时间:2024/05/24 02:35

Perl不多说,本博客默认系统中已经安装了Perl

1. Perl与数据库

Perl 5 中我们可以使用 DBI 模块来连接数据库。

DBI 英文全称:Database Independent Interface,中文称为数据库独立接口。

DBI 作为 Perl 语言中和数据库进行通讯的标准接口,它定义了一系列的方法,变量和常量,提供一个和具体数据库平台无关的数据库持久层。
盗图一张:
这里写图片描述
图表中 DBI 获取所有 API(Application Programming Interface:应用程序接口) 发送过来的 SQL 数据,然后分发到对应的驱动上执行,最后再获取数据返回。

以下设置了比较常用的变量名命名方法:

$dsn    驱动程序对象的句柄$dbh    一个数据库对象的句柄$sth    一个语句或者一个查询对象的句柄$h      通用的句柄 ($dbh, $sth, 或 $drh),依赖于上下文$rc     操作代码返回的布什值(true 或 false)$rv     操作代码返回的整数值@ary    查询返回的一行值的数组(列表)$rows   操作代码返回的行数值$fh     文件句柄undef   NULL 值表示未定义\%attr  引用属性的哈希值并传到方法上

2. Web CGI服务器支持及配置

[root@lockey cgi-bin]# vim /etc/httpd/conf/httpd.conf 

在你进行CGI编程前,确保您的Web服务器支持CGI及已经配置了CGI的处理程序。

Apache 支持CGI 配置:

设置好CGI目录:

#确保配置文件里面有这样一行内容ScriptAlias /cgi-bin/ /var/www/cgi-bin/

运行脚本目录配置:

<Directory "/var/www/cgi-bin">   AllowOverride None   Options +ExecCGI   Order allow,deny   Allow from all</Directory>

这里写图片描述
在 AddHandler 中添加 .pl 后缀,这样我们就可以访问 .pl 结尾的 python 脚本文件:

AddHandler cgi-script .cgi .pl .py

这里写图片描述

3. 安装Perl的数据库驱动模块(部分系统有默认安装,但是还是请确认)

[root@lockey cgi-bin]# yum install perl-DBI -y[root@lockey cgi-bin]# yum install perl-DBD-MySQL -y

4. 测试网页是否正常运行

运行脚本要在cig-bin目录下,并且有执行权限,一般都是755权限设置

[root@lockey cgi-bin]# cat perltest.cgi #!/usr/bin/perlprint "Content-type:text/html\r\n\r\n";print '<html>';print '<head>';print '<meta charset="utf-8">';print '<title>Lockey.cheng.com</title>';print '</head>';print '<body>';print '<h2>Hello World! </h2>';print '<p>Lockey de CGI script</p>';print '</body>';print "<font size=+1>环境变量:</font>\n";foreach (sort keys %ENV){  print "<b>$_</b>: $ENV{$_}<br>\n";}print '</html>';1;[root@lockey cgi-bin]# 

这里写图片描述

4. 数据库连接及操作(插入数据)

[root@lockey cgi-bin]# cat perltest.cgi #!/usr/bin/perl -wprint "Content-type:text/html\r\n\r\n";print '<html>';print '<head>';print '<meta charset="utf-8">';print '<title>Lockey.cheng.com</title>';print '</head>';print '<body>';print '<h2>Hello World! </h2>';print '<p>Lockey de CGI script</p>';print '</body>'; #use strict;use DBI;my $host = "localhost";         # 主机地址my $driver = "mysql";           # 接口类型 默认为 localhostmy $database = "lockeyDB";        # 数据库# 驱动程序对象的句柄my $dsn = "DBI:$driver:database=$database:$host";  my $userid = "root";            # 数据库用户名my $password = "halo";        # 数据库密码# 连接数据库my $dbh = DBI->connect($dsn, $userid, $password ) or die "Cannot conenct db: $DBI::errstr\n";print "I have connected to the mariaDB database!\n";my $sth = $dbh->prepare("INSERT INTO User(FIRST_NAME,         LAST_NAME, AGE, SEX, INCOME)         VALUES ('Lockey', 'Mohan', 23, 'M', 200000)");$sth->execute() or die $DBI::errstr;$sth->finish();$dbh->commit or die $DBI::errstr; $sth->finish();$dbh->disconnect();print '</html>';1;[root@lockey cgi-bin]# 

这里写图片描述

5. 数据查询(核心代码块)

my $sth = $dbh->prepare("SELECT * FROM User");   # 预处理 SQL  语句$sth->execute();    # 执行 SQL 操作 # 循环输出所有数据while ( my @row = $sth->fetchrow_array() ) {         print '<p>-----------</p>';     print join('\t', @row)."\n";     print '<p>-----------</p>';         }

结果:
这里写图片描述