DBI->在终端中执行时连接工作,但在浏览器执行时不连接

时间:2018-05-05 11:58:51

标签: mysql perl localhost cgi dbi

我正在编写一个CGI程序,在浏览器中打印数据库查询结果。脚本看起来像这样

#!/usr/bin/perl

use strict;
use warnings;

use DBI;

print "Content-type: text/html\n\n";

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 . "\n\n";

print "Successful connection\n";

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/,默认情况下配置为/ /etc/apache2/httpd.conf

中的/ cgi-bin /

如果我通过网络浏览器执行此操作,我只会获得第一次打印Connecting,而不是or print的{​​{1}}。我一直试图意识到错误是什么,但我无法得到有用的解决方案。

1 个答案:

答案 0 :(得分:0)

从你的最终评论中我怀疑:服务器使用的perl根本没有安装DBD::mysql,而你的命令行perl却

只需在服务器上安装该驱动程序模块,一切都应该正常

请注意,并不需要为Apache"配置,只是CGI代码使用的perl副本没有该模块

顺便说一下,内容类型应该是text/plain,而不是text/html:您没有生成HTML