Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

Re: OK, OK, I'm taking the DBI plunge. Now what?

by runrig (Abbot)
on Jan 10, 2002 at 22:31 UTC ( [id://137799]=note: print w/replies, xml ) Need Help??


in reply to OK, OK, I'm taking the DBI plunge. Now what?

Unless the first row of your text file contains the column names, you'll need to use the col_names attribute. See the DBD::CSV docs and examples.
  • Comment on Re: OK, OK, I'm taking the DBI plunge. Now what?

Replies are listed 'Best First'.
Re: Re: OK, OK, I'm taking the DBI plunge. Now what?
by peppiv (Curate) on Jan 17, 2002 at 18:40 UTC
    use strict; use DBI; use CGI::Carp qw(fatalsToBrowser); use CGI qw (:standard); print "Content-type: text/html\n\n"; my $dbh = DBI->connect(qq{DBI:CSV:f_dir=/usr/local/etc/httpd/cgi- +bin/}, {RaiseError => 1} ); $dbh->{'sep_char' => "|", 'col_names' => ["timestamp", "email", " +name", "address", "city", "state", "zip"]}; my $sth = $dbh->prepare( q{SELECT * FROM export_list WHERE state += ? }); my $rc = $sth->execute ('OH'); print "Query will return $sth->{NUM_OF_FIELDS} fields.\n\n"; while (my @result = $sth->fetchrow_array()) { print "@result\n"; } die $sth->errstr if $sth->err; $dbh->disconnect;

    I've used the col_names attribute and I don't receive any errors for that line. However I do get this error:
    Attempt to fetch row from a Non-SELECT statement at /usr/local/etc/httpd/cgi-bin/DBI_start3.pl line 23.(*the fetchrow_array statement line).I'm researching this now. Question - If an error statement comes up for line 23, is it safe to assume that the lines of code before that are executing OK? Assuming you're not jumping around with subs.
      You are not specifying which table you are setting the column names on. Look at the DBD::CSV docs. Your columns should be set like so:
      $dbh->{'csv_tables'}->{'export_list'}={ 'sep_char' => "|", 'col_names' => [qw(timestamp email name address city state zip)]};
      Also, execute returns no useful information on a select statement, so there is no point in saving its return value. On a non-select statement (e.g. update, delete), it returns the number of rows affected.

      And your die() statement is useless since you have RaiseError set. If there is a DBI error, DBI will execute a die() on its own before you ever get to that die statement.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://137799]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others avoiding work at the Monastery: (5)
As of 2024-04-18 20:33 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found