【发布时间】:2018-05-05 11:58:51
【问题描述】:
我正在编写一个在浏览器中打印数据库查询结果的 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/,默认配置/cgi-bin/在/etc/apache2/httpd.conf
如果我通过网络浏览器执行它,我只会得到第一个打印 Connecting 而没有其他任何东西,甚至没有来自 DBI->connect 的 or print。我一直试图了解错误是什么,但我无法找到有用的解决方案。
【问题讨论】:
-
@Tanktalus 不,这不是同一个错误...我使用 Mac OS High Sierra 和 Apache2 作为服务器。还是不知道是什么问题,还是谢谢你!
-
如果那里记录了某些内容,您是否检查过错误日志?
-
Web 服务器使用的 perl 副本是否与您在命令行中使用的相同?是否有可能没有为服务器安装
DBD::mysql?我建议您将use DBD::mysql添加到文件顶部。如果驱动程序不可用,那么您的代码将立即终止,而不是等到DBI尝试自动加载它。 -
@Borodin 来自 Apache 的 error_log 文件显示 4 个错误,都与 DBD::mysql 有关,所以我猜这是因为我的终端中有模块但没有为 Apache 配置。正如你所说,我尝试使用 DBD::mysql,但随后出现 500 Internal Server Error 并且 error_log 显示
AH01215: Can't locate DBD/mysql.pm in @INC (you may need to install the DBD::mysql module)。不知道还能尝试什么,但感谢您的帮助!
标签: mysql perl localhost cgi dbi