[luau] Perl Frustration!!

Kevin English kevin at english.net
Thu Aug 21 23:12:02 PDT 2003


ah, u have to extra  lines here.....and u forgot the most important one

 ## start here...
 use strict ; ## makes people declare variables with 'my'

 my $sql = "select wkstncpu.sn, ipaddr from wkstncpu
 where wkstncpu.code = $systemcode;";
 my $sth = $dbh->prepare($sql)
	or die "Cannot prepare: " . $dbh->errstr();
    # start the query
 $sth->execute() or die "Cannot execute: " . $sth->errstr();
 # fetch result and assign
 my ($cpusn ,$ip) = $sth->fetchrow_array();
 $sth->finish;

perl, what a great language....

k

> On Sun, 17 Aug 2003 16:42:51 -1000
> Deven Phillips <dphillips at gothic-hawaii.com> wrote:
>
>> Blech!!! Perl DBI is frustrating in and of itself... The C API is much
>> cleaner!!!
>
> I disagree. I don't know about the C API, but the Perl DBI module makes
> perfect sense to me.
>
> Here is a piece of an equipment database I wrote:
>
>    # simple query to get cpu s/n and ip for identification
>    my $sql = "select wkstncpu.sn, ipaddr from wkstncpu
> where wkstncpu.code = $systemcode;";
>    my $sth = $dbh->prepare($sql)
> 	or die "Cannot prepare: " . $dbh->errstr();
>    # start the query
>    $sth->execute() or die "Cannot execute: " . $sth->errstr();
>    # fetch result and assign
>    @row = $sth->fetchrow_array();
>    $cpusn = $row[0];
>    $ip = $row[1];
>    $sth->finish;
>
>
> There are always five steps. 1) Stuff a SQL statement into a scalar
> (here $sql). 2) Prepare (precompile) the SQL. Not always reqired by the
> underlying database, but leave it in so your code doesn't break
> elsewhere. 3) Execute the SQL statement; this will create a result
> stream. 4) Read the result stream. There are several choices, here I use
> the fetchrow_array method to parse a record and place the pieces into
> succesive elements of the array @row.  5) Finish.
>
> Often the result set will contain multiple records. Here is an example
> from a different part of the program, showing a loop building HTML
> listbox elements:
>
> # cycle through result one row at a time
> # and fill listbox OPTION tags
>     while (@row = $sth->fetchrow_array()) {
> 	print "<OPTION>" . join(",", @row) . "</OPTION>";
>     }
>
> The only thing I grumble about is the way assigning $row[n] to a
> variable doesn't support built-in position-independent data element
> names. A schema change can trigger a complete application re-write.
> Instead of
>
>
>    @row = $sth->fetchrow_array();
>    $cpusn = $row[0];
>    $ip = $row[1];
>
> I would like to be able to write
>
>    $cpusn = $sth->fetchitembyname("wkstncpu.sn");
>    $ip = $sth->fetchitembyname("wkstncpu.ipaddr");
>
> and have the location of the data in the record resolved by means of the
> database schema. Without taking a significant performance hit.
>
> --
>           _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/
>          _/                                     _/
>         _/  Gary Dunn                          _/
>        _/  Open Slate Project                 _/
>       _/  http://openslate.sourceforge.net/  _/
>      _/  http://www.aloha.com/~knowtree/    _/
>     _/  Honolulu                           _/
>    _/  registered Linux user #273809      _/
>   _/                                     _/
>  _/  This tagline is umop apisdn.       _/
> _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/
>
>
> ---------------------------------------------
> This message was sent using Endymion MailMan.
> http://www.endymion.com/products/mailman/
>
>
> _______________________________________________
> LUAU mailing list
> LUAU at videl.ics.hawaii.edu
> http://videl.ics.hawaii.edu/mailman/listinfo/luau






More information about the LUAU mailing list