[ic] Difficulties grabbing sql data within perl tags.

Cameron G ritontor at icenet.com.au
Thu Jan 6 02:29:15 EST 2005


> 
> > > 
> >  
> >
> >>>On Wed, 5 Jan 2005 19:02:41 +0800
> >>>"Cameron G" <ritontor at icenet.com.au> wrote:
> >>>
> >>>      
> >>>
> >>>>>>>On Wed, 5 Jan 2005 17:14:41 +0800 "Cameron G" 
> >>>>>>><ritontor at icenet.com.au> wrote:
> >>>>>>>
> >>>>>>>              
> >>>>>>>
> >>>>>>>>I'm positive I'm missing something terribly obvious here, but 
> >>>>>>>>right now I'm stumped. All I'm trying to do
> >>>>>>>>                
> >>>>>>>>
> >>is hack the
> >>    
> >>
> >>>>>Detailed
> >>>>>          
> >>>>>
> >>>>>>>>reports page to display a list of the item descriptions
> >>>>>>>>                
> >>>>>>>>
> >>>>>that were
> >>>>>          
> >>>>>
> >>>>>>>purchased -
> >>>>>>>              
> >>>>>>>
> >>>>>>>>seemingly a simple task, merely a query that says "select
> >>>>>>>>                
> >>>>>>>>
> >>>>>>>description
> >>>>>>>              
> >>>>>>>
> >>>>>>>>from orderline where order_number = 'the order number'".
> >>>>>>>>                
> >>>>>>>>
> >>>>>>>> my $results = $Tag->query( { sql => $ordersql, }
> >>>>>>>>                
> >>>>>>>>
> >>>>>>>Use [perl tables="products store orderline"] or set
> >>>>>>>              
> >>>>>>>
> >>the base
> >>    
> >>
> >>>>>>>attribute for query to orderline.
> >>>>>>>              
> >>>>>>>
> >>>>>Cameron, have you tried setting the base attribute for
> >>>>>          
> >>>>>
> >>the query
> >>    
> >>
> >>>>>tag to orderline as Racke proposed?
> >>>>>E.g. add to query tag:
> >>>>>base='orderline'
> >>>>>          
> >>>>>
> >>>Isn't his problem that he is using $Tag->query() instead of
> >>>
> >>>  $Db{products}->query({ sql => $ordersql })  ?
> >>>      
> >>>
> >>This appears to be a reasonable objection. Cameron, please try
> >>
> >>$Db{orderline}->query({ sql => $ordersql })
> >>
> >>Ciao
> >>	Racke
> >>
> >>    
> >>
> >
> >Oh, that seems to work a little better. It's seems to be 
> attempting the 
> >query now. Of course, nothing is ever that simple. Ideally, 
> all I want 
> >to return is the description field, so basically all I need is an 
> >array, or a reference, but when I do this:
> >
> >my $ordersql = "select description from orderline where 
> order_number = 
> >'$line->{order_number}'"; my $results = 
> $Db{orderline}->query({ sql => 
> >$ordersql });
> >
> >It complains: 
> >
> >Safe: Can't coerce array into hash at (tag 'perl') line 17
> >
> >Which is interesting, as I was under the assumption it'd default to 
> >giving me a reference to whatever clunky ol' data structure that DBI 
> >spat out. It's the same result if I try to select *. I saw 
> the arrayref 
> >=> 'foo' stuff in the query tag docs, but that doesn't 
> really look like 
> >what I need to do here, or am I once again being stupid? Sigh. It's 
> >days like this that IC makes me feel really dumb.
> >  
> >
> If memory serves, the $Db object's query sub will return an 
> arrayref of arrayrefs.  Thus, you can work with the 
> description field via:
> my $results = $Db{orderline}->query( {sql => "SELECT 
> description FROM orderline WHERE order_number = 
> '$line->{order_number}'"; for my $record (@$results) {
>     print "Description: $record->[0]";
> }
> 
> If you want an arrayref of hashrefs, I think you need to pass 
> "hashref => 1" as one of the options in your call to $Db->query().
> 
> Hope this helps.
>     - Ethan
> 

Thanks Ethan, that worked perfectly. The really strange thing is that your
code is (as far as I can tell) precisely the same as what I had already: 

my $results = $Db{orderline}->query( {sql => "SELECT description FROM
orderline WHERE order_number = '$line->{order_number}'"});

Vs. 

my $ordersql = "select description from orderline where order_number =
'$line->{order_number}'";
my $results = $Db{orderline}->query({ sql => $ordersql });

To think that creating a string and using it in the query would break rather
than using it inline. Oh well, perhaps this thread will save someone else
the head scratching I went through. Thanks! 



More information about the interchange-users mailing list