Maybe I've misunderstood, but can't you just use the prepare method, and
then use the various statement attributes such as NAME[_xx], TYPE,
PRECISION, SCALE, etc.  You don't actually need to fetch any rows to get at
this info.

Steve

-----Original Message-----
From: Daniel Kasak [mailto:[EMAIL PROTECTED] 
Sent: Tuesday, 24 August 2004 12:21 PM
To: [EMAIL PROTECTED]
Subject: Re: Getting a field list from a query with NO results?

David N Murray wrote:

>If you don't know the columns that will be returned, I presume you're
>doing something akin to 'select * from'.  At any rate, if you know the
>table name, why not ask the database for the table info?
>
>#!/usr/bin/perl
>use DBI;
>my $dbh = DBI->connect("dbi:mysql:test",'','');
>die "Unable to connect:\n" . $DBI::errstr . "\n" if (! defined($dbh));
>
># 3rd param is table name, 4th means all columns
>my $sth = $dbh->column_info(undef, undef, 'test', '%');
>while (my @ar = $sth->fetchrow_array()) {
>    print join(":", @ar), "\n";
>}
>$sth->finish;
>$dbh->disconnect;
>
>which is akin to
>mysql> desc test;
>
>HTH,
>Dave
>  
>
Yeah I've thought about that.
The problem is that people can use field aliases, eg:

select concat(FirstName, ' ', LastName) as FullName from MyTable
or even
select ID as MyID from MyTable

so I need to be able to grab the field name as it will be returned from 
the database server.

I was kinda hoping that even though a 'blank' recordset was being 
returned, that I could still *somehow* pull some field names out of it. 
And I'd also like to make it DB-neutral - which is one of the reasons 
I'm shying away from using a LIMIT clause. I suppose I can figure out 
why DB server is being used and create a DB-specific query on-the-fly, 
eg SQL Server would want a "select TOP 1 * from MyTable" instead of 
MySQL's "select * from MyTable LIMIT 1".

-- 
Daniel Kasak
IT Developer
NUS Consulting Group
Level 5, 77 Pacific Highway
North Sydney, NSW, Australia 2060
T: (+61) 2 9922-7676 / F: (+61) 2 9922 7989
email: [EMAIL PROTECTED]
website: http://www.nusconsulting.com.au

Reply via email to