Отправляет email-рассылки с помощью сервиса Sendsay

Perl - подпишись и учись!

  Все выпуски  

Perl - подпишись и учись!


Информационный Канал Subscribe.Ru


 Hi, All!  
    Приветствую всех!(А именно 9603 подписчиков)

Рад Вас приветствовать!
По просьбе приятеля стояла задача перевода небольшой статейки о использовании MySQL(естественно с PERL). Разобью эту статейку на две рассылки... Надеюсь кому-то она будет полезна... Да, и ещё, некоторое время назад общался с людьми(из подписчиков), которые помогали мне с редактированием рассылки, так вот, обращаюсь к ним: "Люди, если Вы ещё здесь - откликнитесь :)), пожалуйста, нужна будет Ваша помощь, а emailы Ваши - растерял ввиду своей рассеянности.. :(("
#форматироание - автора статьи, оригинал - http://www.danchan.com/feature/2000/10/16/mysql/mysql.htm

продолжение...

Использование Perl DBI как интерфейс для MySQL

Почему PERL? Почему не PHP? Как-никак, но считается, что PHP4 достаточно быстр за счёт нового интерпретатора?

Я отвечу, потому, что Perl - это язык, который наиболее часто сейчас используется. А я люблю идти в ногу со стандартами индустрии. Perl имеет большую поддержку online и большинство книг написано о нём. Существует CPAN, the Comprehensive Perl Archive Network, где Вы можете найти модули для исполнения Ваших самых сокровенных желаний, относительно программирования, конечно :-). DBI даёт Вам интерфейс, который будет работать как с самой примитивной БД, так и с самой последней версией Oracle РСУБД.

Давайте начнём с соединения с базой данных:

use DBI;

my $dsn = 'DBI:mysql:my_database:localhost';
my $db_user_name = 'admin';
my $db_password = 'secret';
my ($id, $password);
my $dbh = DBI->connect($dsn, $db_user_name, $db_password);

Давайте предположим, что мы получили из формы логин и пароль пользователя. Итак,

$input_nickname = 'Cowlick' и $input_password = 'udder'

Естественно наше желание проверить действительно ли введёный пароль соответствует введёному логину в нашей БД.

my $sth = $dbh->prepare(qq{select id, password from users where nickname = $input_nickname});
$sth->execute();

Отмечу отсутствие точки с запятой. При одной команде она не обязательна.

Как же мы получим результат? Т.к. мы ожидаем всего один ряд то,

($id, $password) = $sth->fetchrow_array();
$sth->finish(): # закончили запрос
if ($input_password eq $password) # чувствительно к регистру
{
     ... # вход удачен
}

Что же делать если результат - более одной строки? Продолжающиеся запросы к

$sth->fetchrow_array()

вернут нам оставшуюся часть данных.

my $sth = $dbh->prepare(qq{
    select nickname, favorite_number from users
});
$sth->execute();
while (my ($nickname, $favorite_number) =
  sth->fetchrow_array())  # делать выборку данных
                             # пока ничего не останется
{
     print "$nickname, $favorite_number\n";
}
$sth->finish();

Если же мы хотим сохранить все результаты для последующего использования

my (@matrix) = ();
while (my @ary = $sth->fetchrow_array())
{
    push(@matrix, [@ary]);  # [@ary] это ссылка
}
$sth->finish();

Ссылка для программистов на C может быть расценена как указатель. Матрица теперь является массивом массивов ссылок или же двумерным массивов ссылок.

Вы можете достать ряд $i при помощи:

@{matrix[$i]}

Или, достать нужный ряд и колонку ($i, $j) в таблице:

$matrix[$i][$j]

Для операций MySQL, которые не возвращают результатов можно использовать метод do вместо prepare для того, чтобы выполнить SQL-команду.

$dbh->do("insert into message_votes
  (message_id, user_id, vote) values (1, 3, 'good')");

И, наконец, чтобы окончить работу с базой - рассоединение:

$dbh->disconnect();

________________________________________
И ещё, если у вас есть вопросы, то задавайте их на форуме сайта(http://perl.iatp.org.ua).
________________________________________

                С уважением, Дмитрий 





http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное