Лістинг 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/</&lt/;

$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;}

print

$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:ser­vertype: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; просмотров: 544;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.008 сек.