Введение в СУБД MySQL


Example.13.3


#!/usr/bin/perl -w use strict; use CGI qw(:standard); use CGI::Carp; # Использовать модуль DBI use DBI; CGI::use_named_parameters(1); my ($db,Stable); my Soutput = 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 Stable"); # Посылаем запрос серверу. $table_data->execute; # Если возвращаемое значение не определено, таблица не существует # или пуста; мы не проверяем, что из двух верно. if (not $table_data) { print header, startjtml( 'title'=> "Данные по $host => $db => Stable", 'BGCOLOR'=>'white'); prin<<END_OF_HTML; <H1>$host</h1> <H2>$db</h2> Таблицы'Stable' нет в $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 BOROER> <CAPTION>Пoля</caption> <TR> <ТН>Поле<ТН>Тип<ТН>Размер<ТН>МОТ NULL </tr> <UL> END_OF_HTML If $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], $ndt_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 "</ulx/li>"; } print "END_OF_HTML; </ol> </body></html> END_OF_HTML

Листинг 13.3. Закрыть окно




Начало  Назад  Вперед