Ой, этот учебник выглядит не очень хорошо. Попробуйте вместо этого, и позвольте мне объяснить, что он делает:
#!c:\strawberry\perl\bin\perl.exe -T
use strict;
use warnings;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use DBI;
my $host = 'localhost';
my $database = 'store';
my $tablename = 'inventory';
my $user = 'root';
my $pw = '';
my $dbh = DBI->connect("DBI:mysql:$database;host=$host",
$user, $pw, { RaiseError => 1 })
or die "Unable to open database: $DBI::errstr";
my $stmt = $dbh->prepare('SHOW DATABASES');
$stmt->execute();
my $databases = $stmt->fetchall_arrayref();
$dbh->disconnect();
my $page = new CGI;
print $page->header();
print $page->start_html();
foreach $database (@$databases) {
print $database->[0] . '<br />';
}
print $page->end_html();
Первая строка - это стандартный заголовок скрипта, который сообщает веб-серверу, какой двоичный файл запустить. В этом случае я добавил флаг '-T', чтобы включить режим taint в Perl. Это поможет для безопасности.
Вы добавили «используйте строгие» и «используйте предупреждения», очень хорошо. Приступайте к практике всегда иметь их в верхней части ваших сценариев.
Следующие три оператора использования - это библиотеки из CPAN , которые будут включены в этот скрипт. В этом случае я использовал CGI для генерации HTML, CGI :: Carp для вывода сообщений об ошибках в браузер (это может помочь при отладке) и DBI для использования баз данных. Если вы когда-либо получили сообщение об ошибке («Не удается найти ...»), то это означает, что вы пытаетесь использовать библиотеку, которую вы еще не установили из CPAN. Вы можете посмотреть этот документ , чтобы получить помощь по установке библиотек.
Далее я настраиваю локальные переменные. Поскольку я включил строгий режим выше, перед каждой новой переменной должен стоять префикс «my» или «our», в зависимости от желаемой области видимости.
Теперь я подключаюсь к базе данных с помощью модуля DBI. Здесь я использую библиотеку mysql, поэтому убедитесь, что DBD :: mysql установлен. Я также передал необязательный параметр RaiseError; это гарантирует, что любые ошибки SQL приведут к ошибке. Если бы я не включил это, мне пришлось бы проверять переменную возврата для любого вызова SQL, который я сделал. Я также решил прекратить работу скрипта с помощью операции die, если возникнут проблемы с подключением. Вы можете изменить это на перенаправление для производства; что-либо после ключевого слова 'or' будет выполнено при ошибках.
Затем я выполняю свои реальные операции SQL. Используя свой дескриптор базы данных, я готовлю оператор и выполняю его. Затем я получаю все свои результаты в ссылку на массив для дальнейшего использования. Затем я отключаюсь от базы данных.
Последний блок фактически выводит HTML. Я создаю новый объект CGI, а затем распечатываю заголовок. Я запускаю HTML, а затем распечатываю каждую найденную базу данных. В выражении foreach мне нужно сообщить Perl, что $ database на самом деле является ссылкой на массив, поэтому я добавляю символ @ перед переменной. Затем, поскольку каждая строка является ссылкой на другой массив, я получаю первый столбец с помощью оператора '-> [0]'. Наконец я заканчиваю HTML.