最近一段时间在研究perl的基本语法以及相应的cgi程序,在此过程中配置了一些相关环境。
环境:winxp+perl+apache+php+mysql
配置和测试的过程开始时很顺利,但是到最后一个环节--配置dbd::mysql时出了问题。现总结如下:
由于要在服务器中测试以下这段代码,DBI和DBD::mysql两个模块就应当正确安装,否则DBI->connect()不会被识别。
CGI Connection test (Must have DBI module installed)
#!/usr/bin/perl
print "Content-type: text/html/n/n";
# DBI is perl module used to connect to the database
use DBI;
# hostname or ip of server (for local testing, localhost should work)
$config{'dbServer'} = "localhost";
# username and password to log onto db server
$config{'dbUser'} = "root";
$config{'dbPass'} = "";
# name of database
$config{'dbName'} = "test";
# MySQL driver (shouldn't need to change)
$config{'dataSource'} = "DBI:mysql:$config{'dbName'}:$config{'dbServer'}";
my $dbh = DBI->connect($config{'dataSource'},$config{'dbUser'},$config{'dbPass'}) or
die "Can't connect to $config{'dataSource'}<br>$DBI::errstr";
print "Connected successfully<br>";
$dbh->disconnect();
但在ppm(perl package manager)中并不能搜索到DBD::mysql包,与mysql相关的也只有下图所示的三个包。

这样的话,虽然有些相关的或者类似的包存在,但里面接口的使用方法却大相径庭。
为了找到原因,我尝试了许多方法来测试这段代码,但是在apache上的输出仅仅是空白,加入print函数也只能猜测这段代码没有得到执行。
没办法,只好又找了一段perl访问mysql的代码,用perl解释器来查看原因。
#!E:/Tools/Perl/bin/perl
use strict;
use DBI;
# Connect to the database.
my $dbh = DBI->connect("DBI:mysql:database=test;host=localhost",#红色部分出了问题
"root", "",
{'RaiseError' => 1});
#剩下的代码省略
控制台输出如下图:
这样,终于找到了不能正确执行的原因。DBD::mysql没有安装完全,因而无法提供mysql驱动。
(上图中列出了已经安装的驱动,其中包括mysqlPP、SQLite等,这些包均能够在ppm中看到)
既然没有就得想办法安装它,网上给出了一些方法,其中最简便的方法是如下命令:
ppm install DBI
ppm install DBD::mysql
执行后提示有错误。这种方式实际上就是在使用包管理器,然而管理器中并没有出现这个包,由此可以推断,这个包的开发商可能改变了包的发布、属性什么的。
带着这种猜测,我又一次踏入茫茫的网页中搜寻起来,在ActiveState PPM Repository里面发现了问题的根源。下图示。
![]()
表中显示,DBD-mysql无论在哪个平台的Builds Status均为fail,这表明该包(4.006版)并没有测试通过。这就解释了为何在ppm中我们并不能看到它。不过现在没有通过不能代表以后也不行,这张表是随时更新的。
小结:这次对这个问题的探讨,不仅仅是为了弄明白出错的原因,更重要的是了解到当今基于网络开发的发展趋势、应用前景等。DBI的用途广泛,因而对于其相应于各个数据库的驱动开发会与日俱增,所用的技术也会愈加成熟。
参考文献:
1.Instructions for Apache, Perl/CGI, PHP, and MySQL on Windows
2. DBD::mysql - MySQL driver for the Perl5 Database Interface (DBI)
在配置perl CGI程序与MySQL连接时,遇到DBD::mysql模块无法通过ppm安装的问题。由于DBD-mysql 4.006版本在ActiveState PPM Repository的Builds Status为fail,导致安装失败。此问题揭示了数据库驱动开发的重要性以及网络开发的挑战。
6370

被折叠的 条评论
为什么被折叠?



