Лістинг 5.17. Hellocookie.pl
#!/usr/bin/perl
use CGI;
$co = new CGI;
%greetings = $co->cookie('greeting');
if ($co->param('name')) {$greetings{'name'} =$co->param('name')}
print $greetings{'name'};
if ($co->param('birthday') )
=~ m/\d\d\/\d\d/)
{$greetings{'birthday'} = $co->param('birthday');}
($date $month, $year) = (lockaltime)[3, 4, 5];
$date = join ("/" $month + 1, $day);
if(exists($greetings{'name'})){
$greetingstring = "Hello ". $greetings{'name'};
$greetingstring .= ", happy birthday!" if ($date eq $greetings{'birthday'});
$greetingstring =~ s/</</;
$promt = "If you want to change this page's settings
just enter new data below.";
} else { $promt = "To have this page greet you next time
enter your data below "; }
$greetingcookie = $co->cookie(
-name=>'greetings'
-value=>\%greetings
-expires=>'+365d' );
if ($co->param('name') || $co->param('birthday')) {
print $co->header(-cookie=>$greetingcookie);
} else { print $co->header;}
$co->start_html(-title=>"Cookie Example") $co->center(
$co->h1("Cookie Example") $co->p, $co->h1("$greetingstring"),
$promt $co->startform, "Your name: ",
$co->textfield(
-name=>'name'
-default=>''
-override=>1 ), $co->p,
"Your birthday (mm/dd): ", $co->textfield(
-name=>'birthday'
-default=>''
-override=>1
),
$co->p $co->submit, $co->reset,
$co->endform), $co->end_html;
Доступ до баз даних.
Мова програмування Perl перетворилася з інструменту, використовуваного переважно адміністраторами Unix-систем, в найбільш поширену платформу розробки для World Wide Web. Perl не призначався спочатку для Web, але простота його использования і потужні функції для роботи з текстом зробили природним його вживання для CGI-программирования. Схожим чином, MYSQL зі своєю високою швидкістю і широкми можливостями стала дуже привабливим засобом для веб-сервер-розробників. Природно тому, що був розроблений інтерфейс Perl до MYSQL, об'єднавши, таким чином їх достоїнства.
Зараз існують два інтерфейси між Perl і MYSQL. Раніший складається із спеціалізованого інтерфейсу Mysql.pm. Інший, новіший інтерфейс є модулем, що підключається, в комплекті DBI (DataBase Independent) - незалежних від бази даних модулів. DBI є спробою забезпечити загальний Perl API для доступу до будь-яких баз даних і надання вищій переносимості. Інтерфейс DBI став найбільш надійним і стандартним, і розробники MYSQL рекомендують користуватися лише DBI, оскільки подальша розробка модуля Mysql.pm припинена. Проте багато успадкованих систем все ще використовують їх, тому ми розповімо тут і про них.
DBI.Методом доступу, що рекомендується, до баз даних MYSQL з Perl є інтерфейс DBD/DBI. DBD/DBI означає DataBase Dependent/DataBase Independent (Залежний від бази данных/Независимый від бази даних). Назва пов'язана з двох'ярусною реалізацією інтерфейсу. У нижньому ярусі знаходиться залежний від бази даних рівень. На нім існують свої модулі для кожного типа бази даних, доступного з Perl. Поверх цього рівня знаходиться незалежний від бази даних рівень. Це той інтерфейс, яким ви користуєтеся при доступі до бази даних. Вигода такої схеми в тому, що програмістові потрібно знати лише один API рівня незалежності від бази даних. Коли з'являється нова база даних, кому-небудь потрібно лише написати для неї модуль DBD (залежний), і вона стане доступна всім програмістам, використовуючим DBD/DBI.
Як і в будь-якому модулі Perl, для діставання доступу потрібно вказати DBI в директиві use:
#!/usr/bin/perl -w
use strict;
use CGI qw(:standard);
use DBI;
При запуску програм Perl для MySQL/mSQL слід завжди задавати аргумент командного рядка -w. Завдяки цьому DBI перенаправлятиме всі специфічні для MYSQL повідомлення про помилки на STDERR, і ви зможете побачити помилки, викликані роботою з базою даних, не удаючись до явної перевірки їх в програмі.
Всяка взаємодія між Perl, з одного боку, і MYSQL— з іншою, проводиться за допомогою об'єкту, відомого як описувач бази даних (handle). Описувач бази даних (database handle) - це об'єкт, представлений в Perl як скалярне посилання і що реалізовує всі методи, використовувані для зв'язку з базою даних. Одночасно можна відкрити будь-яке число описувачів бази даних, обмеження накладають лише ресурси системи. Метод connect() використовує для створення описувача формат з'єднання DBI:servertype:database:hostname:port (ім'я вузла і порту необов'язкові), додатковими аргументами служать ім'я користувача і пароль:
my $dbh= DBI->connect( 'DBI:mysql:mydata ', undef, undef);
my $dbh = DBI->connect('DBI:mysql:mydata', 'me', 'mypass"};
Атрибут servertype є ім'ям специфічного для бази даних DBD-модуля, в нашому випадку «mysql» (зверніть увагу на точне використання регістра). У першому варіанті створюється з'єднання з сервером MYSQL на локальній машині через сокет Unix. Це найбільш ефективний спосіб зв'язку з базою даних, який повинен використовуватися при з'єднанні на локальному сервері. Якщо вказано ім'я вузла, воно використовується для з'єднання з сервером на цьому вузлі через стандартний порт, якщо лише не заданий і номер порту. Якщо при з'єднанні з сервером MYSQL ви не вказуєте ім'я користувача і пароль, то користувач, що виконує програму, повинен володіти достатніми привілеями в базі даних MYSQL.
У Perl 5 використовуються дві угоди по виклику модулів. У об'єктно-орієнтованому синтаксисі для посилання на метод певного класу використовується символ стрілки «->» (як в DBI->connect). Інший метод - використання непрямого синтаксису, в якому за ім'ям методу слідує ім'я класу, а потім - аргументи. У останньому прикладі метод connect слід було б записати як connect DBI 'DBI:mysql:mydata', 'me', 'mypass'.
Після з'єднання з сервером MYSQL описувач бази даних - у всіх прикладах цього розділу $dbh - стає шлюзом до бази даних. Наприклад, так готується запит SQL:
$dbh->prepare($query);
При роботі з MYSQL можна включати в запит інші бази даних, явно вказуючи їх імена. Крім того, в MYSQL, при необхідності одночасного доступу до декількох баз даних можна створити декілька описувачів бази даних і використовувати їх спільно.
Для ілюстрації використання DBI розглянемо наступні прості програми. У лістингу 5.18 datashow.pl приймає як параметр ім'я вузла; за відсутності параметра приймається ім'я «localhost». Потім програма виводить список всіх баз даних, що є на цьому вузлі.
Дата добавления: 2016-04-02; просмотров: 547;