dbi->connect在终端中执行时工作,但在浏览器中执行时不工作

slhcrj9b  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(451)

我正在编写一个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/in /etc/apache2/httpd.conf 如果我通过网络浏览器执行它,我只会得到第一个打印 Connecting 别的什么都没有,连 or printDBI->connect . 我一直在试图认识到错误是什么,但我无法得到一个有用的解决办法。

kqqjbcuj

kqqjbcuj1#

从您最后的评论来看,正如我所怀疑的:服务器正在使用的perl根本没有 DBD::mysql 安装,而命令行perl
只需在服务器上安装驱动程序模块,一切都应该很好
注意,is不需要“为apache配置”,只是cgi代码使用的perl副本没有该模块
顺便说一下,内容类型应该是 text/plain ,不是 text/html :您没有生成html

相关问题