Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   [mysql 4] можно ли вывести комманду show tables в таблицу или файл? (https://forum.antichat.xyz/showthread.php?t=57778)

je0n 08.01.2008 00:33

[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

Если надо в таблицу - скажите в какую или новую...


Время: 00:36