Ron, someone else will correct me if I'm wrong, but long ago this bit me
also.   I believe I remember the answer being that "SHOW" is a mysql
client command - that is not a valid SQL command.

I'm not sure if mysql has a mysql-only sql command you can give to get
the names of the databases - or maybe they have some system table that
contains the names of the databases and you can SELECT from that.  Check
the mysql docs to see if there's maybe a mysql specific SQL command you
can give - similar to SHOW but not specific to the mysql client - to
list databases.

If you have the "Programming the Perl DBI" book, I believe there's a
place in there that describes how to get the names of available drivers
and datasources (which may contain the database names).   I'd also read
the perldocs for DBI and DBD::mysql to see what $dbh and $sth methods
are available - maybe one of them will give you a list of database
names.

Sorry I can't be more help - I'm not using DBI nor MySQL regularly :-( 
Not that I don't want to...

Hardy Merrill

>>> "Ron Wingfield" <[EMAIL PROTECTED]> 12/29/04 01:07PM >>>
Hello everyone,

I'm having difficulty solving this code problem.  I can load a popup
list of states from a "states" table, but I can't seem to get-it-right
when I execute a SHOW, rather than a SELECT query.  Actually, I want to
create a popup list of all DATABASES through the CGI.  From the command
line, this works:

  mysql> SHOW DATABASES;
  +-----------+
  | Database  |
  +-----------+
  | cookbook  |
  | test      |
  +-----------+
  2 rows in set (0.00 sec)

As you can see, there are two databases on my server, "cookbook" and
"test".  I prepare the query request, and execute it without any error
complaints.  The while/fetchrow_array returns only one iteration or row,
. . .apparently the last row which contains the "test" database, and
ultimately my popup list only contains the "test" database row.  I'm not
getting any error from the fetchrow_array function; however I only see
one diagnostic display of "GOT HERE! db_name=test".  Apparently, the
while loop has only looped one time.  Regarding the following code, why
is "cookbook" missed?

  $sth=$dbh->prepare("SHOW DATABASES;");
  $sth->execute( );
  DBI_error("Query execution to SHOW DATABASES failed.","7");
  while($db_name = $sth->fetchrow_array( ))
  {
          DBI_error("Fetchrow_array failed.","7");    # Test/no
exit-on-error.
          push(@db_name_values, $db_name);        # Save each value in
array.
          DBI_error("GOT HERE!  db_name=$db_name<br>","1"); #### TEMP!
                                           # When used with option "1",
----^
                                           # this always prints a
diagnostic "trace" message. 
  }
  print # Start of print block
  $cgi-> popup_menu
  (
                  -name=>'db_name',
                  -values=>[EMAIL PROTECTED]
  ),

Thanks and OTTF,
Ron Wingfield

FreeBSD 4.8  --  Apache http 2.0.28 -- MySQL client/server 4.1.7
Perl 5.8.5 -- p5-DBD-mysql-2.9004 driver -- p5-DBI-1.46

--------------------------------------------------------------------------------

Reply via email to