[mysql 4] можно ли вывести комманду show tables в таблицу или файл?

Discussion in 'PHP' started by je0n, 7 Jan 2008.

  1. je0n

    je0n Elder - Старейшина

    Joined:
    14 May 2006
    Messages:
    345
    Likes Received:
    96
    Reputations:
    41
    сабж. ну и если можно, то как?
     
  2. dinar_007

    dinar_007 Мадемуазель

    Joined:
    18 Jan 2005
    Messages:
    1,019
    Likes Received:
    770
    Reputations:
    97
    Ты хочешь из консоли вывести или как? Не совсем понятен сам вопрос... Пиши конкретней, что да как (не "сабж", а вопрос в развёрнутый вопрос в самой теме, а не в её названии)... Если я тебя правильно понял, то ты создаёшь таблицу со столбцом tables и хочешь командой show tables заполнить строки этой таблицы в столбце tables?
    Вот тут скрипт "сварганил" на скорую руку, который обращается к базе и выводит show tables на экран...
    Code:
    #!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...
     
    #2 dinar_007, 10 Jan 2008
    Last edited: 11 Jan 2008
    1 person likes this.
  3. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    je0n, если тебя интересует возможность вывода запроса SHOW TABLES в файл средствами SQL (что-то типа SELECT ... INTO OUTFILE '...' от пользователя у которого есть file_priv), то это невозможно... Зато ты можешь на том же самом PHP обойти результат этого запроса и построчно записать в файл... Но конструкции вида SELECT * FROM (SHOW TABLES) и прочие - НЕВОЗМОЖНЫ!
     
    3 people like this.
  4. dinar_007

    dinar_007 Мадемуазель

    Joined:
    18 Jan 2005
    Messages:
    1,019
    Likes Received:
    770
    Reputations:
    97
    Вот вроде довёл до ума... Записывает в файл...
    Code:
    #!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
    
    
    
    Если надо в таблицу - скажите в какую или новую...
     
    2 people like this.