Thanks Hardy, I suspect that you are correct, sir!

I'm going to go pickup a copy of "Programming the Perl DBI" book, today.  I 
believe that's an O'Reilly publication, isn't it?  (I can "Google" it.)

By the way, I've just executed the following code.  Notice that there is no 
"while" loop, but rather three simple calls to fetchrow_array( ).

  a.. The first returns the last database in the known world as a row.
  b.. The second call as expected, returns nothing in $db_name; subsequently, a 
NULL (or blank value) is pushed onto the array.  It's interesting to note that 
no DBI error is reported, and this is understandable because hitting the end of 
a list is not considered a DBI error, . . .just that the list is exhausted.
  c.. The third call pushes a hard-coded value, "foobar" onto the array.  

The displayed popup menu will display the list as:

  test

  foobar

Here's the test code:  (BTY Hardy, this is also an example of how I use the 
DBI_error( ) as a test and debug tool.)
  $db_name = $sth->fetchrow_array();
  push(@db_name_values, $db_name);         # Save each value in array.
  DBI_error("GOT HERE!  db_name=$db_name_values[0]<br>","1"); #### TEMP!

  $db_name = $sth->fetchrow_array();
  DBI_error("Any DBI Error will be printed above.<br>","7"); #### TEMP!
  push(@db_name_values, $db_name);         # Save each value in array.
  DBI_error("GOT HERE!  db_name=$db_name_values[1]<br>","1"); #### TEMP!

  push(@db_name_values, "foobar");         # Save each value in array.
  DBI_error("GOT HERE!  db_name=$db_name_values[2]<br>","1"); #### TEMP!

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

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

  ----- Original Message ----- 
  From: Hardy Merrill 
  To: [EMAIL PROTECTED] ; dbi-users@perl.org 
  Sent: Wednesday, December 29, 2004 12:23 PM
  Subject: Re: Problem with "while/fetchrow_array"


  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