对DBD::mysql问题的探究

在配置perl CGI程序与MySQL连接时,遇到DBD::mysql模块无法通过ppm安装的问题。由于DBD-mysql 4.006版本在ActiveState PPM Repository的Builds Status为fail,导致安装失败。此问题揭示了数据库驱动开发的重要性以及网络开发的挑战。

最近一段时间在研究perl的基本语法以及相应的cgi程序,在此过程中配置了一些相关环境。

 

环境:winxp+perl+apache+php+mysql

 

 

 

配置和测试的过程开始时很顺利,但是到最后一个环节--配置dbd::mysql时出了问题。现总结如下:

 

由于要在服务器中测试以下这段代码,DBIDBD::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驱动。

 

(上图中列出了已经安装的驱动,其中包括mysqlPPSQLite等,这些包均能够在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)

3. ActiveState PPM Repository

 

 

 

 

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值