Normally I would expect a quoted string to represent one value, this is 
probably not true for DBI binding as you mentioned. 

Cheers

=> -----Original Message-----
=> From: Chas. Owens [mailto:chas.ow...@gmail.com]
=> Sent: 19 August 2010 13:22
=> To: Babale Fongo
=> Cc: Uri Guttman; beginners@perl.org
=> Subject: Re: Strange behaviour while using DBI with binding
=> 
=> On Wed, Aug 18, 2010 at 19:55, Babale Fongo <bfo...@googlemail.com>
=> wrote:
=> snip
=> > In the first example, DBI always passed the value for offset and
=> ignored the
=> > second value after the comma.
=> >
=> > I'm now using the second code as it works without problem even if
=> string
=> > contains space. I just need to understand why DBI behaves that way.
=> >
=> > I cannot hard code limit in the string because the value varies.
=> This is
=> > used in a pager and the values of limit varies depending on which
=> page is to
=> > be displayed.
=> snip
=> 
=> Placeholders represent single values.  The DBI will properly quote any
=> value it binds to the placeholder.  Therefore, you must use more than
=> one placeholder if you want to provide more than one value:
=> 
=> #!/usr/bin/perl
=> 
=> use strict;
=> use warnings;
=> 
=> use DBI;
=> 
=> unlink "foo.db" or die $! if -e "foo.db";
=> my $dbh = DBI->connect(
=>      "dbi:SQLite:dbname=foo.db",
=>      "",
=>      "",
=>      {
=>              ChopBlanks         => 1,
=>              PrintError         => 0,
=>              RaiseError         => 1,
=>              ShowErrorStatement => 1,
=>              FetchHashKeyName   => "NAME_lc",
=>      }
=> ) or die DBI->errstr;
=> 
=> $dbh->do("CREATE TABLE foo (n INTEGER)");
=> 
=> my $insert = $dbh->prepare("INSERT INTO foo (n) VALUES (?)");
=> 
=> for my $n (1 .. 100) {
=>      $insert->execute($n);
=> }
=> 
=> my $select = $dbh->prepare("SELECT n FROM foo ORDER BY n LIMIT ?, ?");
=> 
=> my $count  = 5;
=> my $offset = 0;
=> 
=> do {
=>      $select->execute($offset, $count);
=>      my @a;
=>      while (my $rec = $select->fetchrow_hashref) {
=>              push @a, $rec->{n};
=>      }
=>      if ($select->rows) {
=>              my $format = join(" ", ("%3d") x @a) . "\n";
=>              printf $format, @a;
=>              $offset += $count;
=>      } else {
=>              $offset = 0;
=>      }
=> } while ($offset);
=> 
=> 
=> --
=> Chas. Owens
=> wonkden.net
=> The most important skill a programmer can have is the ability to read.


--
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to