--- 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>