Hi, I am running the latest MySql on a windows 200 machine. I also use the control center gui to do all my work with. I have a Perl program that parses online order data and then using Perl's DBI I write this data to the database. Now, It all works fine except that each order and orders items are written twice to the database. I have looked over my code but only see one insert statement for order information and the ordered items. I guess I need a fresh set of eyes to see where my error is.
I have included the code below with the database connection information highlighted in red: TIA Trevor #!/usr/local/bin/perl #============ # Main script #------------ use strict; use MivaOrder; use Data::Dumper; #Use Perl's Database Interface (DBI) with the NySQL module to connect the Maverick database use DBI; my %attr = (PrintError => 1, RaiseError => 1); my $dbname='maverick'; my $dbuser='root'; my $dbpass=''; my $dbh=DBI->connect('DBI:mysql:database=maverick;host=localhost;port=3306',"$d buser","$dbpass", \%attr) || die "Unable to connect to database maverick on localhost: $DBI::errstr\n"; my @new_orders; #my $email = qw(c:\\maverick\\trevor_trial2.txt); open(ORDER,$ARGV[0]) or die "Error opening \"$ARGV[0]\": $!\n"; my $order = undef; while(<ORDER>) { # Keep appending to the order string until we reach the end of the order. unless(/^Site rating\.\.\: \"/) { $order .= $_ and next; } # We are done with the order. my $obj = MivaOrder->new($order); #print Dumper(\$obj); push @new_orders,$obj; $order = undef; } my $sth1 =$dbh->prepare("INSERT INTO miva_retail_orders(wholesale_company,order_number,date,credit_card_type,ship ped,shiptype,bill_name,bill_company,bill_addr1,bill_addr2,bill_city,bill_sta te,bill_zip,bill_country,ship_name,ship_addr1,ship_addr2,ship_city,ship_stat e,ship_zip,ship_country,email,bill_phone_number,bill_phone_number2,ship_phon e_number,ship_phone_number2,sales_tax,shipping_amount,coupon_type,coupon_amo unt,total) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); foreach my $new_order(@new_orders) { # Enter the database and write the data $sth1->execute($new_order->wholesale_company(),$new_order->order_number(),$n ew_order->date(),$new_order->credit_card_type(),$new_order->shipped(),$new_o rder->ship_type(),$new_order->bill_name(),$new_order->bill_company_name(),$n ew_order->bill_to_street(),$new_order->bill_to_street2(),$new_order->bill_to _city(),$new_order->bill_to_state(),$new_order->bill_to_zip(),$new_order->bi ll_to_country(),$new_order->ship_name(),$new_order->ship_to_street(),$new_or der->ship_to_street2(),$new_order->ship_to_city(),$new_order->ship_to_state( ),$new_order->ship_to_zip(),$new_order->ship_to_country(),$new_order->email_ address(),$new_order->bill_phone_number(),$new_order->bill_phone_number2(),$ new_order->ship_phone_number(),$new_order->ship_phone_number2(),$new_order-> sales_tax(),$new_order->shipping_amount(),$new_order->coupon_type(),$new_ord er->coupon_amount(),$new_order->total()); } $sth1->finish; $dbh->disconnect; #================== # Package MivaOrder #------------------ package MivaOrder; use strict; use Carp; use English; use vars qw($AUTOLOAD); my %fields = ( wholesale_company =>undef, order_number =>undef, date =>undef, bill_name =>undef, bill_email_address =>undef, bill_phone_number =>undef, bill_phone_number2 =>undef, bill_business_name =>undef, bill_to_street =>undef, bill_to_city =>undef, bill_to_state =>undef, bill_to_zip =>undef, bill_to_country =>undef, ship_name =>undef, ship_email_address =>undef, ship_phone_number =>undef, ship_phone_number2 =>undef, ship_business_name =>undef, ship_to_street =>undef, ship_to_city =>undef, ship_to_state =>undef, ship_to_zip =>undef, ship_to_country =>undef, code =>undef, name =>undef, quantity =>undef, price =>undef, shipping_method =>undef, shipping_amount =>undef, sales_tax =>undef, total =>undef, notes =>undef, coupon_type =>undef, coupon_amount =>undef, credit_card_type =>undef, COD =>undef ); sub AUTOLOAD { my ($self,$value) = @_; $AUTOLOAD =~ /.*::(\w+)/; $self->{$1} = $value if($value); return $self->{$1}; } sub new { my ($that,$order) = @_; croak "Order file is undefined" if(!$order); my $class = ref($that) || $that; my $self = {}; $self->{$_} = $fields{$_} foreach(keys %fields); bless $self, $class; $self->init($order); return $self; } sub init { open(TREVOR, "> c:\\maverick\\HITHERE.txt") or die "Error opening HITHERE.txt $!\n"; my ($self,$order) = @_; my @lines = split(/\n/,$order); my $in_address = undef; my $in_order = undef; foreach my $line(@lines) { #our $n += 1 if $line =~/Order Number :/; #print $n; #next unless($line =~ /\w+/); chomp ($line); if($line=~ /([EMAIL PROTECTED])\s+\"/i) { $self->{wholesale_company} = $1; #print $1 . "\n"; } elsif($line =~ /Order\s+Number\s+:\s+(.*)$/i) { $self->{order_number} = $1; #print $1 . "\n"; } elsif ($line =~ /Placed\s+:\s+([0-9]{2})\/([0-9]{2})\/([0-9]{4})\s+([0-9]{2}:[0-9]{2}:[0-9]{ 2})/i) { my $mon=$1; my $day=$2; my $year = $3; my $time=$4; my $date = $year . "-" . $mon . "-" . $day . " " . $time ; $self->{date} = $date; #print $date . "\n"; } elsif (($line =~ /Ship To:/i) || defined($in_address)) { $in_address = 1 and next if(!defined($in_address)); my $regex = qr#(.{0,41})(.{0,41})#; if (!defined($self->{bill_name})) ($self->{bill_name},$self->{ship_name}) = ($line =~ /$regex/); } elsif (!defined($self->{ship_email_address})) { ($self->{ship_email_address},$self->{bill_email_address}) = ($line =~ /$regex/); #print $1 . "\n"; #print $2 . "\n"; } elsif (!defined($self->{ship_phone_number})) { ($self->{ship_phone_number},$self->{bill_phone_number}) = ($line =~ /$regex/); #print $1 . "\n"; #print $2 . "\n"; } elsif (!defined($self->{ship_phone_number2})) { ($self->{ship_phone_number2},$self->{bill_phone_number2})= ($line =~ /$regex/); # $self->{ship_phone_number2}= ($line =~ /^\(?[0-9]{3}\)?-?|s?[0-9]{3}-?|s?[0-9]$/); #$self->{bill_phone_number2} = ($line =~ /\(?[0-9]{3}\)?-?|s?[0-9]{3}-?|s?[0-9]$/); #print $1 . "\n"; #print $2 . "\n"; } elsif (!defined($self->{bill_business_name}) ||!defined($self->{ship_business_name})) { ($self->{ship_business_name},$self->{bill_business_name}) = ($line =~ /$regex/); #print $1 . "\n"; #print $2 . "\n"; } elsif (!defined($self->{bill_to_street}) ||!defined($self->{ship_to_street})) ($self->{ship_to_street},$self->{bill_to_street}) = ($line =~ /$regex/); #print $1 . "\n"; #print $2 . "\n"; } elsif (!defined($self->{ship_to_city}) ||!defined($self->{bill_to_city})){ my ($ship_to,$bill_to) = ($line =~ /$regex/); ($self->{ship_to_zip},$self->{ship_to_state},$self->{ship_to_city} ) # = split(/\s+/,$ship_to); # = ($ship_to =~ /^(.*)\s+([A-Za-z]{2})\s+([0-9]{5}(-[0-9]{4})?)/);#^(\w+\s+?\w+?\s+?\w+?\s+\w+)\s(\w+)\s(\d{5}-?(\d{4})?)/); #^(\w+\s?\w*.?\s?\w+)\s(\w+)\s(\d{5}(\W)?(\d{5})?)/); = map { scalar reverse } split ' ', ( reverse $ship_to), 3; print TREVOR $self->{order_number}. "\n"; print TREVOR $1 . "\ n"; print TREVOR $2 . "\n"; print TREVOR $3 . "\n"; ($self->{bill_to_zip},$self->{bill_to_state},$self->{bill_to_city} ) #= split(/\s+/,$bill_to); #= ($line =~ /\s{2,}(\w+.?\s?\w*.?\s?\w+.?)\s?(\w{2})\s?([0-9]{5}-?([0-9]{4})?)/); #= ($bill_to =~ /\s{2,}(.*)\s+([A-Za-z]{2})\s+([0-9]{5}(-[0-9]{4})?)$/);#\s{2,}(\w+(\s+\w+)? \s+\w+)\s+(\w{2})\s?([0-9]{5}-?([0-9]{4})?)/); = map { scalar reverse } split ' ', ( reverse $bill_to), 3; #print $1 . "\n"; #print $2 . "\n"; #print $3 . "\n"; } elsif (!defined($self->{ship_to_country})) { ($self->{ship_to_country},$self->{bill_to_country}) = ($line =~ /$regex/); #print $1 . "\n"; #print $2 . "\n"; $in_address = undef; } } elsif (($line =~ /Code/) || defined($in_order)) { $in_order = 1 and next if(!defined($in_order)); #if(!defined($self->{code}) && !defined($self->{quantity}) && !defined($self->{price})) { if($line =~ /^(\w+)\s+(.*?)\s+(\d+)\s+(\$\d+\.\d+)/) ($self->{code},$self->{name},$self->{quantity},$self->{price}) = ($line =~ /^(\w+)\s+(.*?)\s+(\d+)\s+(\$\d+\.\d+)/); #print $1 . "\n"; #print $3 . "\n"; #print $4 . "\n"; # Need to write items to table at this point in case we have multiple items ordered. #if (defined($self->{code})&&defined($self->{quantity}) &&defined($self->{price})) { my $sth =$dbh->prepare("INSERT INTO miva_retail_items_ordered(order_number,part_number,quantity,price) VALUES (?,?,?,?)"); $sth->execute($self->{order_number},$self->{code},$self->{quantity},$self->{ price}); # ($self->{code},$self->{quantity},$self->{price}) = undef; #} #print" Defined is: $self->{coupon_type} \n"; }elsif ($line =~ /Coupon:\s+(.*):\s+\(\$(\d+\.\d+)\)/){ #print "In coupon\n"; ($self->{coupon_type},$self->{coupon_amount}) = ($line =~ /Coupon:\s+(.*):\s+\(\$(\d+\.\d+)\)/); #print "Coupon is " . $1 . "\n"; #print "Coupon type is " . $2 . "\n"; }elsif ($line =~ /Shipping:(\s+.*:)?\s+\$(\d+\.\d+)/){ ($self->{shipping_method},$self->{shipping_amount}) = ($line =~ /Shipping:(\s+.*:)?\s+\$(\d+\.\d+)/); #print "In shipping\n"; #print "Shipping Method is: " . $1 . "\n"; #print $2 . "\n"; }elsif ($line =~ /Sales Tax\:\s+\$(\d+\.\d+)/) { ( $self->{sales_tax}) = ($line =~ /Sales Tax\:\s+\$(\d+\.\d+)/); # print "In sales tax: $self->{sales_tax}\n"; #print "Sales Tax is: " . $1 . "\n"; #}elsif (!defined($self->{COD})){ }elsif($line =~ /COD\s+Charge:\s+\$(\d+\.\d+)/){ ($self->{COD}) = ($line =~ /COD\s+Charge:\s+\$(\d+\.\d+)/); #print "DOC is: ". $1 . "\n"; #$in_order = undef; }elsif ($line =~ /\s+Total:\s+\$(\d+\.\d+)/) { $self->{total}= $1; print PARSED "Shippint: $self->{total}\n"; } # endif } } # Trim all the spaces before and after the field. $self->{$_} =~ s/^\s+|\s+$// foreach (keys %$self); } -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]