DBI-> connect работает, когда выполняется в терминале, но не при запуске из браузера - PullRequest
0 голосов
/ 05 мая 2018

Я пишу 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 print из DBI->connect. Я пытался понять, в чем заключается ошибка, но не могу найти полезное решение.

1 Ответ

0 голосов
/ 06 мая 2018

Из вашего последнего комментария, как я и подозревал, на Perl, который использует сервер, просто не установлен DBD::mysql, в то время как на вашем Perl для командной строки

Просто установите этот модуль драйвера на сервер, и все должно быть хорошо

Обратите внимание, что не нужно "настраивать для Apache", просто у копии perl, используемой кодом CGI, этого модуля нет

Кстати, тип контента должен быть text/plain, а не text/html: вы не генерируете HTML

...