我正在编写一个在浏览器中打印数据库查询结果的CGI程序。脚本如下所示
#!/usr/bin/perl
use strict;
use warnings;
use DBI;
print "Content-type: text/htmlnn";
my $driver = "mysql";
my $database = "DBname";
my $ip = "127.0.0.1";
my $db = "DBI:$driver:DBNAME:$ip:database=$database";
my $username = "user";
my $password = "pass";
print "Connecting ...";
my $connection = DBI->connect($db, $username, $password)
or print "Couldn't connect to database: " . DBI->errstr . "nn";
print "Successful connectionn";
my $query = $connection->prepare("SELECT id FROM table");
$query->execute() or die $DBI::errstr;
while ( my @row = $query->fetchrow_array() ) {
my ($id) = @row;
print "ID = $id n";
}
$query->finish();
好吧,我的问题是当我使用
perl test.cgi
它工作正常,并且我正确获得了打印结果。CGI 脚本位于/Library/Webserver/CGI-Executables/
中,默认情况下配置为/cgi-bin//etc/apache2/httpd.conf
如果我通过网络浏览器执行它,我只会得到第一个打印Connecting
,没有别的,甚至没有来自DBI->connect
的or print
。我一直在试图意识到错误是什么,但我无法获得有用的解决方案。
从您的最后评论来看,正如我所怀疑的那样:服务器使用的perl根本没有安装DBD::mysql
,而您的命令行perl则安装了
只需在服务器上安装该驱动程序模块,一切都应该很好
请注意,不需要"为 Apache 配置",只是 CGI 代码使用的 perl 副本没有该模块
顺便说一下,内容类型应该是text/plain
,而不是text/html
:你不是在生成 HTML