Perl MySQL Problem - PullRequest
       2

Perl MySQL Problem

1 голос
/ 08 мая 2011

Я полный Perl Noob, я программист PHP, и я пытаюсь изучать Perl, в настоящее время с использованием учебника Tizag .
Я запускаю его на Windows Xampp Install, расположенном по адресу c: \ xampp -
У меня есть этот код, который дает мне ошибку.

use strict; use warnings;
use CGI::Simple;
use DBI;

$host = "localhost";
$database = "store";
$tablename = "inventory";
$user = "root";
$pw = "";

$connect = Mysql->connect($host, $database, $user, $pw);

@databases = $connect->listdbs;
foreach $database (@databases) {
    print "$database<br />";
}

Ошибка:

Невозможно найти CGI / Simple.pm в @INC (@INC содержит: C: / xampp / perl / site / lib / C: / xampp / perl / lib C: / xampp / perl / site / lib C : / xampp / apache) на C: /xampp/htdocs/testing/learn_perl/index.pl строка 5. Ошибка начала - компиляция прервана на C: /xampp/htdocs/testing/learn_perl/index.pl строка 5.,

Ответы [ 4 ]

4 голосов
/ 08 мая 2011

Вам не нужен CGI :: Simple для любого кода, который вы нам показали. Если вы планируете позднее превратить вашу программу в приложение CGI, то я рекомендую вам использовать CGI, а не CGI :: Simple. Одним из наиболее очевидных преимуществ CGI является то, что он включен в стандартную установку Perl, поэтому вам не нужно устанавливать его самостоятельно.

Но это только начало ваших проблем. Похоже, вы нашли ужасный учебник. Возможно, вам лучше использовать ресурсы, связанные с learn.perl.org .

1 голос
/ 08 мая 2011

Копировать пасту из: http://startperl.blogspot.com/2007/11/perl-module-how-to-install-perl-module.html

Существует утилита ppm , поставляемая с каждой активной установкой perl, по крайней мере, я получил ее с perl Vesion 5.8.X Все, что вам нужно сделатьвыполните следующие шаги

  1. Нажмите Пуск
  2. Нажмите Выполнить
  3. Введите cmd и нажмите enter
  4. Введите ppm и нажмите enter
  5. Как только вы получите приглашение ppm
    вроде ppm> введите install modulename
    например.установить CGI :: Simple

Утилита ppm установит модуль perl для вас.

0 голосов
/ 09 мая 2011

Ой, этот учебник выглядит не очень хорошо. Попробуйте вместо этого, и позвольте мне объяснить, что он делает:

#!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.

0 голосов
/ 08 мая 2011

Вы должны установить модуль CGI :: Simple из CPAN.

Один простой способ установки модулей из CPAN:

curl -L http://cpanmin.us | perl - --sudo App::cpanminus

, и после него вы можете устанавливать модули спросто:

cpanm Some::Module

например

cpanm CGI::Simple
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...