Робота з MySql, Perl, Програмування, статті

Cухінін A., Webscript.ru

Останнім часом досить популярною базою даних стала MySql.Це не дивно – невеликий, вельми і вельми спритний, безкоштовний сервер баз даних.Не позбавлений, правда, недолік, серед яких основний (на мій погляд) – відсутність підтримки вкладених запитів.Але його скорострільність і безоплатність, очевидно, зіграли вирішальну роль у виборі багатьох веб-майстрів використовуватисаме MySql у своїх розробках.

Якщо я не помиляюся, то мова Perl займає чільне місце в області Web-додатків. Основнамаса CGI – скриптів і різноманітних інформаційних / керуючих систем на Web інтерфейсі в даний час написано саме на Perl.Для цієї мови накопичений величезний світовий досвід програмування, знайшов своє втілення в бібліотеці CPAN.Вже написана маса бібліотек для всіх випадків життя (як вам наприклад, bioperl – “A library of tools and modules of particular interest to biologists.”?), І найчастіше,замість “винаходи велосипеда” потрібно просто переглянути список готових бібліотек Perl, напевно, щось вже написано поприводу розв’язуваної вами проблеми. В даному випадку, ми розглядаючи взаємодію мови Perl з сервером баз данихMySql, будемо використовувати бібліотоеку DBD :: mysql.

Для використання бібліотеки DBD необхідна наявність бібліотеки DBI, тому вони повинні бути встановлені накомп’ютері, де використовується скрипт. Крім того, необхідна наявність сервера MySql де-небудь поблизу від вас длятестових робіт.

Отже,

У першу чергу,

ви повинні домовитися з адміністратором сервера надати вам доступ доMySql з можливістю створювати базу або хоча б таблиці в базі. Після цього, можна протестувати підключення до MySql сервера:


#!/usr/bin/perl
use DBI;my $ dbh ="Логін", "пароль") | | die $ DBI :: errstr;
@tables = $dbh->func( '_ListTables' );
foreach $line(@tables) {
print $line,"\n";
}
$dbh->disconnect();

При цьому, якщо все нормально, ви на виході цього скрипта повинні нічого отримати щось типу:


таблиця1таблиця2Табліца3


Де таблиця1 – Найменування таблиць у вашій базі даних.
Якщо з’єднання створитине вийшло, тоді щось неправильно, або не той хост, пароль, логін або немає такої бази – наприклад, якщо немає бази даних, то буде щось типу:

Unknown database 'ваша_база_данних' at try.pl line N.

Якщо немає доступу користувачеві під “логін” або неправильні логін або пароль, то буде видане повідомлення

Access denied for user: 'логін@ваш_хост.домен' (Using password: YES) at try.pl line N.

Адреса сервера може побут як канонічним виду dbserver.domain.com (якщо коректно работет DNS) або абсолютним IP адресою.

Отже, якщо вдалося успішно Законнекть, то ви отримаєте список таблиць у вашій БД. Якщо ні – перевірте логін / пароль,посварилася з сисадміном, щоб він вам дозволив доступ з вашої машини до сервера MySql. (Тільки на сисадміна сильноНе наїжджайте – може щось погане зробити вам, сам знаю, сам сисадмін :)).

Тепер спробуємо створити таблицю в вашій базі даних. Визначимося відразу – ми зробимо невеликий каталог посилань на ваші улюблені ресурси.Створимо таблицю, гордо іменується “links”.У таблиці будуть наступні поля:

Найменування Тип Довжина Коментар
id TINYINT 4 Ідентифікатор, повинен бути автоінкремент
name VARCHAR 64 Німаенованіе посилання
url VARCHAR 128 Посилання – URL
category TINYINT 4 Номер категорії

Коли зі структурою таблиці зрозуміло, виготовимо SQL запит для її створення:

CREATE TABLE links (
id TINYINT, name VARCHAR(64), url VARCHAR(128), category TINYINT
}

У Perl його треба виконувати таким чином:


#!/usr/bin/perl
use DBI;my $ dbh ="Логін", "пароль") | | die $ DBI :: errstr;
$dbh->do("CREATE TABLE links 
(id TINYINT, name VARCHAR(64), url VARCHAR(128), category TINYINT)"); $dbh->disconnect();

Ось такий код для створення таблиці в базі даних.

Метод покажчика бази даних do готує і виконує одиночну інструкцію SQL. Повертає кількість обраних рядків або undef у разі помилки. Якщо повернення = -1, токількість рядків невідомо або відсутній. У нашому випадку кількість рядків неактуально, тому ми опустили оператор присвоювання.

Цей метод еквівалентний наступного набору коду:

sub do {
my($dbh, $statement, $attr, @bind_values) = @_;
my $sth = $dbh->prepare($statement, $attr) or return undef;
$sth->execute(@bind_values) or return undef;
my $rows = $sth->rows;
($rows == 0) ? "0E0" : $rows;
}

Як описано в таблиці 1, Поле id повинно бути autoincrement.Тепер виникають деякі зауваження:

Значить нам потрібно спочатку поміняти властивості поля id таким чином, щоб поле не могло приймати значення null, Було ключовим індексом, і було автоінкрементальним.ось код для цього, три SQL вирази, виконувані методом do:

...
$dbh->do("ALTER TABLE links CHANGE id id TINYINT (4) not null");
$dbh->do("ALTER TABLE links ADD PRIMARY KEY(id)");
$dbh->do("ALTER TABLE links CHANGE id id TINYINT (4) not null AUTO_INCREMENT");
...

SQL інструкція ALTER TABLE дозволяє змінювати властивості таблиці. Більш докладно дивися Документацію по MySql

Тепер таблиця links відповідає нашим вимогам. При додаванні нового запису знаяеніе поля id у оной автоматично збільшуватиметься на 1.

Далі треба створити табличку категорій.Її структура:

Найменування Тип Довжина Коментар
id TINYINT 4 Ідентифікатор категорії – автоінкремент
name VARCHAR 64 Найменування категорії

Цього разу ми створимо таблицю з усіма необхідними нам атрибутами полів, – поле id буде ключовим, автоінкрементом.от SQL запит на її створення:


CREATE TABLE category (id TINYINT not null AUTO_INCREMENT, 
name VARCHAR (64) not null , PRIMARY KEY (id))

Виконуємо його вже відомим нам методом do:


$dbh->do("CREATE TABLE category (id TINYINT not null 
AUTO_INCREMENT, name VARCHAR (64) not null , PRIMARY KEY (id))");

Тепер потрібно в наші таблиці внести дані. Про це в наступній статті

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*