Скрипт 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
Дата добавления: 2015-11-04; просмотров: 692;