Лістинг 5.20. Скрипт tabledump.pl виводить відомості про вказану таблицю

#!/usr/bin/perl -w

use strict;

use CGI qw(:standard);

use CGI::Carp;

# Використовувати модуль DBI

use DBI;

CGI::use_named_parameters(1);

my ($db,$table);

my $output = new CGI;

$server = param('server') or $server = '';

$db = param('db') or die("He вказана база даних !");

# З'єднатися з вказаним сервером.

my $dbh = DBI->connect("DBI:mysql:$db:$server", undef, undef);

# Готуємо запит до сервера, що вимагає всі дані таблиці.

my $table_data = $dbh->prepare("select * from $table");

# Посилаємо запит серверу.

$table_data->execute;

# Якщо повертане значення не визначене, таблиця не існує # або порожня; ми не перевіряємо, що з двох вірно

if (not $table_data) {

print header, start_html('title'=>

"Дані no $host => $db => $table", 'BGCOLOR'=>'white');

print <<END_OF_HTML;

<H1>$host</h1><H2>$db</h2>

Табліци'$table' немає в $db на $host.

</body></html>

END_OF_HTML

exit(0); }

# Тепер ми знаємо, що є дані для видачі. Спочатку виведемо

# структуру таблиці.

print header, start_html('title'=>"Данные по $host => $db =>

$table",'BGCOLOR'=>'white');

print <<END_OF_HTML; <H1>$host</h1> <H2>$db</h2>

<H3>$table</h3><p><TABLE BORDER> <CAPTION>Поля</caption> <TR>

<TH>Поле<TH>Тип<TH>Pa3Mep<TH>NOT NULL </tr> <UL>

END_OF_HTML

# $table_data->name повертає посилання

# на масив полий таблиці.

my @fields = @{$table_data->NAME};

# $table_data->type повертає посилання на масив типів полів.

# Повертані типи мають стандартні позначення SQL

# а не специфічні для MYSQL.

my @types = @{$table_data->TYPE};

# $table_data->is_not_null повертає посилання на масив типа Boolean

# вказуючий, в яких полях встановлений прапор 'NOT NULL'.

my @not_null = @{$table_data->is_not_null};

# $table_data->length повертає посилання на масив довжин полів. Вони

фіксовані для типів INT і REAL, але змінні (

# задані при створенні таблиці) для CHAR.

my @length = @{$table_data->length};

# Всі перераховані вище масиви повертаються в одному і тому ж

# порядку, тому $fields[0],$types[0] $not_null[0] and

# $length[0] відносяться до одного поля.

foreach $field (0. .$#fields) {

print "<TR>\n"; print "<TD>$fields[$field]<TD>$types[$field]<TD>";

print $length[$field] if $types[$field] eq 'SQL_CHAR';

print "<TD>";

print 'Y' if ($not_null[$field]);

print "</tr>\n"; }

print <<END_OF_HTML; </table>

<P><B>Data</b><br><OL>

END_OF_HTML

#відрядковий переміщаємося за даними: DBI::fetchrow_array().

# Ми збережемо дані в масиві в такому ж порядку, як і в

# масивах (@fields, @types, etc.), які ми створили раніше.

while(my((@data)=$table_data->fetchrow_array){

print "<LI>\n<UL>";

for (0..$#data) {

print "<LI>$fields[$_]=> $data[$_]</li>\n";

}

print "</ul></li>"; }

print <<END_OF_HTML;

</ol>

</body></html>

END_OF_HTML

Приклад застосування, використовуючого DBI. DBI допускає будь-які SQL-запити, підтримувані MYSQL. Наприклад, розглянемо базу даних, використовувану в школі для ведення обліку що вчаться, складу класів, результатів іспитів і так далі База даних повинна містити декілька таблиць: одну для даних про предмети, іншу для даних про учнів, таблицю для списку іспитів і по одній таблиці для кожного іспиту. Можливість MYSQL вибирати дані з декількох таблиць, використовуючи об'єднання таблиць, дозволяє спільно використовувати таблиці як погоджене ціле для створення застосування, що полегшує роботу вчителя.

Спершу ми хочемо врахувати дані про екзамени з різних предметів. Для цього нам потрібна таблиця, що містить назви і числові ідентифікатори для іспитів. Нам буде потрібно також окрему таблицю для кожного іспиту. У цій таблиці міститимуться результати випробувань для всіх учнів, а також вищий бал для проведення порівняння. Таблиця test має наступну структуру:

CREATE TABLE test (

id INT NOT NULL AUTO_INCREMENT, name CHAR(100)

subject INT, num INT

Для кожного окремого іспиту структура таблиці така:

CREATE TABLE t1 (

id INT NOT NULL, q1 INT, q2 INT, q3 INT, q4 INT, total INT )

До імені таблиці t приєднаний ідентифікатор іспиту з таблиці test. При створенні таблиці користувач визначає кількість питань. Поле total містить суму балів з усіх питань.

Програма, оброблювальна дані іспитів, називається test.pl. Ця програма, текст якої слідує нижче, дозволяє лише додавати нові іспити. Перегляд іспитів і їх зміна не реалізовані і залишені як вправа.

Цей сценарій добре показує можливості DBI:








Дата добавления: 2016-04-02; просмотров: 501;


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

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

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

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