At 11:13 -0600 2/19/03, Paul DuBois wrote:
At 10:57 -0600 2/19/03, William R. Mattil wrote:
Hello,

I am having some cockpit trouble with the following

MYSQL_RES *mysql_list_fields(MYSQL *mysql, const char *table, const char
*wild);

and it is like lack of understanding on my part. Syntax is:

if (mysql_list_fields( &mysql, "some table name", "some field name"))

mysql_store_result and mysql_fetch_row follow but nothing is ever
returned. If I replace the mysql_list_fields with:

if (mysql_query(&mysql,"Describe some_table_name"))

everything works. Where am I missing the boat here ?
Nothing.  It's just that the documentation for this function is unclear/
incorrect.  I just came to realize this myself a few weeks ago. :-(

The information that mysql_list_fields() returns about the columns is
returned in the result set *metadata*.  So what you should do is call
mysql_fetch_field() to retrieve the metadata for each column of the result
set.

Note that the max_length value will always be zero.

Thanks

Bill
--

William R. Mattil       | Statisticians define a lottery as a tax  
Sr. System Aministrator | on not understanding mathematics
(972) 399-4106          |
To follow up on my own posting:

Here's an example.  It shows how to retrieve various bits of metadata,
including the column metadata. It assumes tbl_name is a string
containing the table name.

MYSQL_ROW       row;
MYSQL_FIELD     *field;
unsigned long   *length;
unsigned int    i;

MYSQL_RES   *res_set = mysql_list_fields (conn, tbl_name, NULL);

if (res_set == NULL)
    fprintf (stderr, "list_fields failed\n");
else
{
    printf ("Number of columns: %d\n", mysql_num_fields (res_set));
    printf ("Number of rows: %d\n", mysql_num_rows (res_set));
    printf ("   %-12s %-12s", "name", "table");
    printf (" %-12s %3s %3s %4s %4s %s\n",
                "default", "len", "max", "type", "dec", "not null");
    for (i = 0; i < mysql_num_fields (res_set); i++)
    {
        field = mysql_fetch_field (res_set);
        printf ("%2u %-12s %-12s",
            i,
            field->name,
            field->table ? field->table : "NULL");
        printf (" %-12s %3u %3u %3u %3u %0x %3d\n",
            field->def ? field->def : "NULL",
            field->length,
            field->max_length,
            field->type,
            field->decimals,
            field->flags,
            IS_NOT_NULL(field->flags)
        );
    }
}

mysql_free_result (res_set);

---------------------------------------------------------------------
Before posting, please check:
  http://www.mysql.com/manual.php   (the manual)
  http://lists.mysql.com/           (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php

Reply via email to