Просмотр полной версии : [mysql 4] можно ли вывести комманду show tables в таблицу или файл?
сабж. ну и если можно, то как?
dinar_007
11.01.2008, 00:40
Ты хочешь из консоли вывести или как? Не совсем понятен сам вопрос... Пиши конкретней, что да как (не "сабж", а вопрос в развёрнутый вопрос в самой теме, а не в её названии)... Если я тебя правильно понял, то ты создаёшь таблицу со столбцом tables и хочешь командой show tables заполнить строки этой таблицы в столбце tables?
Вот тут скрипт "сварганил" на скорую руку, который обращается к базе и выводит show tables на экран...
#!c:/perl/bin/perl
use CGI qw(:all);
use DBI;
use strict;
my $db_user_name = 'root'; # Логин в базе
my $db_password = 'dfvgbh'; # Пароль
my $basename="profpersonal";
my $hosto="localhost";
my $dsn = "DBI:mysql:$basename:$hosto";
my $dbh = DBI->connect($dsn, $db_user_name, $db_password);
print "Content-type: text/html\n";
print "Cache-Control: no-store, no-cache\n";
print "Expires: Thu, 01 Jun 2006 18:00:00 GMT\n";
sub send_to_base #Посылает в базу первый, если второй не равен "nr" возвращает двумерный массив из базы. Добавляет две записи в массив журнала - Запрос и ответ
{
my @return_array=send_to_base_temp($_[0]);
my $error_message=$dbh->errstr;
return @return_array;
}
sub send_to_base_temp #Посылает в базу первый, если второй не равен "nr" возвращает двумерный массив из базы. Добавляет две записи в массив журнала - Запрос и ответ
{
my @temp;
my $qwery=$_[0];
my $no_return=$_[1];
my $sth = $dbh->prepare($qwery);
my $rv=$sth->execute();
if ($no_return ne "nr")
{
my $count_row=0;
while ( (my @qwery_row=$sth->fetchrow_array())and ($count_row<100000))
{
my $count_col=0;
while(($count_col<=$#qwery_row) and ($count_col<100))
{
$temp[$count_row][$count_col]=$qwery_row[$count_col];
$count_col++;
}
$count_row++
}
return @temp;
}
}
send_to_base('set names cp1251;', 'nr');
my @return_array=send_to_base('show tables;');
my $print_string;
for (my$i=0;$i<=$#return_array;$i++)
{
$print_string.="$return_array[$i][0]<br>";
}
print <<END_OF_BEGIN;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<script language="JavaScript" src="/frames.js"></script>
<title></title>
<meta http-equiv="refresh" content="2; url=/cgi-bin/logout.cgi; target=_top" >
</head>
<body>
$print_string
</body>
</html>
END_OF_BEGIN
Под БД и под перл сам подправишь... Требуется DBI + DBD MySQL...
groundhog
11.01.2008, 01:09
je0n, если тебя интересует возможность вывода запроса SHOW TABLES в файл средствами SQL (что-то типа SELECT ... INTO OUTFILE '...' от пользователя у которого есть file_priv), то это невозможно... Зато ты можешь на том же самом PHP обойти результат этого запроса и построчно записать в файл... Но конструкции вида SELECT * FROM (SHOW TABLES) и прочие - НЕВОЗМОЖНЫ!
dinar_007
11.01.2008, 01:42
Вот вроде довёл до ума... Записывает в файл...
#!c:/perl/bin/perl
use CGI qw(:all);
use DBI;
use strict;
my $db_user_name = 'root'; # Логин в базе
my $db_password = 'dfvgbh'; # Пароль
my $basename="profpersonal"; # имя базы
my $hosto="localhost"; # Где она
my $filename="from_base.txt";
my $dsn = "DBI:mysql:$basename:$hosto";
my $dbh = DBI->connect($dsn, $db_user_name, $db_password);
print "Content-type: text/html\n";
print "Cache-Control: no-store, no-cache\n";
print "Expires: Thu, 01 Jun 2006 18:00:00 GMT\n";
sub send_to_base #Посылает в базу первый, если второй не равен "nr" возвращает двумерный массив из базы. Добавляет две записи в массив журнала - Запрос и ответ
{
my @return_array=send_to_base_temp($_[0]);
my $error_message=$dbh->errstr;
return @return_array;
}
sub send_to_base_temp #Посылает в базу первый, если второй не равен "nr" возвращает двумерный массив из базы. Добавляет две записи в массив журнала - Запрос и ответ
{
my @temp;
my $qwery=$_[0];
my $no_return=$_[1];
my $sth = $dbh->prepare($qwery);
my $rv=$sth->execute();
if ($no_return ne "nr")
{
my $count_row=0;
while ( (my @qwery_row=$sth->fetchrow_array())and ($count_row<100000))
{
my $count_col=0;
while(($count_col<=$#qwery_row) and ($count_col<100))
{
$temp[$count_row][$count_col]=$qwery_row[$count_col];
$count_col++;
}
$count_row++
}
return @temp;
}
}
send_to_base('set names cp1251;', 'nr');
my @return_array=send_to_base('show tables;');
my $print_string;
for (my$i=0;$i<=$#return_array;$i++)
{
$print_string.="$return_array[$i][0]<br>";
}
#------------------------------------------------ Запись в файл
open (FILEZ2, ">>$filename");
for (my$i=0;$i<=$#return_array;$i++)
{
print FILEZ2 $return_array[$i][0],"\n";
}
close (FILEZ2);
#----------------------------------------------- Конец Запись в файл
print <<END_OF_BEGIN;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<script language="JavaScript" src="/frames.js"></script>
<title></title>
<meta http-equiv="refresh" content="2; url=/cgi-bin/logout.cgi; target=_top" >
</head>
<body>
$print_string
</body>
</html>
END_OF_BEGIN
Если надо в таблицу - скажите в какую или новую...
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot