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

0

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

  • 0
    Возможный дубликат stackoverflow.com/questions/12408795/…
  • 0
    @Tanktalus нет, это не та же ошибка ... Я использую Mac OS High Sierra и Apache2 в качестве сервера. До сих пор не знаю, в чем проблема, спасибо в любом случае!
Показать ещё 4 комментария
Теги:
cgi
localhost
dbi

1 ответ

0

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

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

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

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

  • 0
    хорошо, спасибо за ваш ответ, я попробую сейчас! И последнее, как мне установить драйвер в Perl? (Это университетский проект, и я никогда не использовал Perl, поэтому я думаю, что легко обновить мою версию Perl новыми модулями, но извините за мое недоразумение ...) Спасибо !!!
  • 0
    Я не знаю. Как я уже сказал, вы, похоже, запускаете разные экземпляры perl в командной строке и на сервере. Вам нужно добраться до места, где последний используется по умолчанию, и выполнить cpan DBD::mysql , но я понятия не имею, возможно ли это, потому что я не знаю структуры вашей системы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню