Re: Error on: my $sth-execute;

2005-07-18 Thread Adriano Ferreira
On 7/18/05, Ron Smith [EMAIL PROTECTED] wrote:
 my $sql = INSERT INTO products VALUES ('$sku', '$partNum', '$name', 
 '$descr', '$stockNum', '$qty', '$img', 'vendNum', '$price');

Beware of the difference of double and single quotes in Perl. Double
quotes interpolate:

$a = 3;
print a: $a\n # prints 'a: 3' and a new line

Single quotes don't interpolate neither do common escapes like \n

print 'a: $a\n' # prints 'a: $a\n

Regards,
Adriano.

--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/ http://learn.perl.org/first-response




Re: Error on: my $sth-execute;

2005-07-18 Thread Adriano Ferreira
On 7/18/05, Adriano Ferreira [EMAIL PROTECTED] wrote:
 Beware of the difference of double and single quotes in Perl. Double
 quotes interpolate:

Oops. That's my mistake. Your single quotes are within double quotes.

Let's try again. I would say that something is wrong here:

my $sth = $dbh-prepare($sql);

which probably returns undef to $sth and then you see the error you
mentioned when invoking 'execute' over it.

my $sth-execute; =line 21

Try telling DBI to raise errors so that you can see them as soon as they happen:

my $dbh = DBI-connect(DBI:mysql:company, username, password, 
{ RaiseError = 1}) 

Regards,
Adriano

--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/ http://learn.perl.org/first-response




Re: Error on: my $sth-execute;

2005-07-18 Thread Ron Smith
--- Lawrence Statton [EMAIL PROTECTED] wrote:

  --0-551411304-1121705388=:507
  Content-Type: text/plain; charset=iso-8859-1
  Content-Transfer-Encoding: 8bit
  
  Hi all,
   
  I'm getting an error when trying to do an INSERT
 statement to a MySQL databas
  e. There's something I'm not understanding here.
 Can anyone point me in the r
  ight direction? I also tried a do method, but
 got the same error. I know th
  e param function is loading the values from the
 form, because I've used a 
  print statement to check the variables.
   
  TIA
  Ron
   
 
 -snip---
  Software error:
  Can't call method execute on an undefined value
 at C:/www/cgi-bin/load_comp
  any_products.cgi line 21.
  For help, please send mail to the webmaster
 ([EMAIL PROTECTED]), giving this er
  ror message and the time and date of the error.
 
 -snip---
 
 1) Your first mistake is never checking for any
 errors;
 
 my $dbh = DBI-conect(...) or
  die ...helpful error message...;
I was using: 

my $dbh = DBI-connect(DBI:mysql:company,
geeksatlarge) or die Error: $DBI::errstr\n;

but will try:

die no database: , DBI-errstr unless $DBH;

Thanks!
 
 Perhaps ESPECIALLY interesting would be around line
 20 adding
 something of the form
 
 my $sth = $dbh-prepare($sql) or
   die There is no statement handle because: ,
 $dbh-errstr;

Yep! I saw a lot of mail on this one. I'm removing the
extra my. It was an oversight. :-)
 
 2) Use placeholders.  REALLY -- where the [EMAIL PROTECTED] are
 people learning to 
write SQL?
 
 3) I have a personal bias against the format of
 insert you have used,
and it makes it utterly impossible to help debug
 your code because
now a critical piece of data ( the output of a
 DESCRIBE products)
is invisible to us.  
 
I always prefer the INSERT INTO table ( col,
 col, col ) VALUES (
?, ? , ? ) ; form as it handles much more
 gracefully the addition
of columns in a table.

Yes, the though had crossed my mind to use this
format, so I'm switching over; also, using
placeholders.

I won't be able to test any corrections until tonight
or tomorrow though.

Thanks, to everyone on the list for help while I'm in
Perl/CGI infancy. ;-)

Ron Smith

 #!/www/perl/bin/perl -wT
 use strict;
 use DBI;
 use CGI qw(:standard);
 use CGI::Carp qw(fatalsToBrowser);
 my $sku = param('sku');
 my $partNum = param('partNum');
 my $name = param('name');
 my $descr = param('descr');
 my $stockNum = param('stockNum');
 my $qty = param('qty');
 my $img = param('img');
 my $vendNum = param('vendNum');
 my $price = param('price');
 my $dbh = DBI-connect(DBI:mysql:company,
 username, password) or die Error:
 $DBI::errstr\n;
 my $sql = INSERT INTO products VALUES ('$sku',
 '$partNum', '$name', '$descr', '$stockNum', '$qty',
 '$img', 'vendNum', '$price');
 my $sth = $dbh-prepare($sql);
 my $sth-execute; =line 21
 $dbh-disconnect;
 
 
 So, let's build a test script that includes all of
 the things I
 mentioned.
 -- cut here
 
 #!/usr/bin/perl
 use strict;
 use warnings; 
 use Data::Dumper;
 use DBI;
 
 our $DBH = DBI-connect( 'dbi:mysql:dbname=test',
 undef , undef ); 
 
 die no database: , DBI-errstr unless $DBH; 
 
 
 # version for running in CGI
 #my ($sku, $partNum, $name, $descr, $stockNum,
 #$qty, $img, $vendNum, $price) = map { param($_)
 } qw / sku partNum name descr stockNum qty img
 vendNum price /; 
 
 
 #
 # brute force for testing
 #
 my $sku = '123456';
 my $partNum = '501-1627';
 my $name = 'TGX Frame Buffer';
 my $descr = 'Sun TGX frame buffer; CG6';
 my $stockNum = 'A-102-55';
 my $qty = 10;
 my $img = undef;
 my $vendNum = '5011627';
 my $price = '12.75';
 
 my $sql = qq { INSERT INTO
  product
  ( sku, partNum, name, descr, stockNum, qty,
 img, vendNum, price )
  VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ? )
  };
 
 my $sth = $DBH-prepare($sql);
 
 die No statement handle: , $DBH-errstr unless
 $sth;
 
 my $rv = $sth-execute( $sku, $partNum, $name,
 $descr, $stockNum, $qty, $img, $vendNum, $price );
 
 doe Something was wrong: , $sth-errstr unless
 defined $rv;
 
 print JOY;
 
 $DBH-disconnect;
 -- cut here
 
 
 
 This works.
 
 By the way, in copying your program I found your
 bug.  Look lin line
 20 and it should stand out.
 
 
 
 
 


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/ http://learn.perl.org/first-response




RE: Error on: my $sth-execute;

2005-07-18 Thread Christian, Ed
 -Original Message-
 From: Ron Smith [mailto:[EMAIL PROTECTED] 
 Sent: Monday, July 18, 2005 12:50 PM
 To: Perl
 Subject: Error on: my $sth-execute;
 
 
 Hi all,
  
 I'm getting an error when trying to do an INSERT statement to 
 a MySQL database. There's something I'm not understanding 
 here. Can anyone point me in the right direction? I also 
 tried a do method, but got the same error. I know the 
 param function is loading the values from the form, because 
 I've used a print statement to check the variables.
  
 TIA
 Ron
  
 -snip---
 Software error:
 Can't call method execute on an undefined value at 
 C:/www/cgi-bin/load_company_products.cgi line 21.
 For help, please send mail to the webmaster 
 ([EMAIL PROTECTED]), giving this error message and the time and 
 date of the error.
 -snip---
 my $sth-execute; =line 21

Try ditching the my.

$sth-execute() or die Error: $DBI::errstr\n;

 $dbh-disconnect;
 
 #my $sth-do(INSERT INTO products VALUES ('$sku', 
 '$partNum', '$name', '$descr', '$stockNum', '$qty', '$img', 
 'vendNum', '$price'));
 snip---
 
 

--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/ http://learn.perl.org/first-response