Я пишу программу 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
. Я пытался понять, что такое ошибка, но я не могу получить полезное решение.
Из вашего последнего комментария это так, как я подозревал: perl, который использует сервер, просто не установлен DBD::mysql
, тогда как ваша команда perl делает
Просто установите этот модуль драйвера на сервер, и все должно быть хорошо
Обратите внимание, что не нужно "настраивать для Apache", просто, что копия perl, которая используется кодом CGI, не имеет этого модуля
Кстати, тип содержимого должен быть text/plain
, а не text/html
: вы не генерируете HTML
cpan DBD::mysql
, но я понятия не имею, возможно ли это, потому что я не знаю структуры вашей системы.