Comments inline below. On Wednesday 09 January 2002 18:13, Paul DuBois wrote: > At 17:23 -0800 1/9/02, Kyle Hayes wrote: [snipped replication explanation] > >The program works by getting the contents of the update log and using > > the Perl DBI do() function on each statement. > > > >The problem that occurs causes this (debug output): > > > > SQL: use acc; > > > > DBD::mysql::db do failed: You have an error in your SQL syntax near > > '; ' at line 1 at /opt/bin/replicator_client line 199, <GEN2> line 4. > > > >I have found that this works _IFF_ I strip off the trailing linefeed > > after the semicolon at the end of the statement. I could swear that > > we create SQL statement in Perl "here docs" that end with a semicolon > > and several empty lines. Is there a DBI guru that can tell me what is > > going on? I really notice this especially in "USE" statements... > > Don't add the semicolon. That's for when you use the mysql client, > which you aren't doing.
Hmm, most of our SQL is generated with the semicolon. It definitely works with the semicolon. I print out what I send to DBI->do() and it has a semicolon. > The error message is complaining about the semicolon, by the way, > not the linefeed. As far as I can tell, this is not true. Here's the main loop that works (changed slightly to protect the innocent :-): $input_line = <$input>; if($input_line =~ m/^\;$/) { # OK, we have the end of a SQL statement. # remove trailing newline chomp($input_line); # add this to the rest of the SQL $sql .= $input_line; # run it through the database if(length($sql)>0 ) { # use eval because we want to catch errors. eval { $rc = $dbh->do($sql); }; } else { $rc = 1; } # did we have a problem? if(!defined($rc) or $@) { # bad news, we have a crash problem. ... print out stuff for the error log file... exit(1); } # SQL successfully handled, reset the SQL accumulation variable. $sql = ''; } else { # no match, still part of the SQL statement. Strip comments. if($input_line !~ m/^\s*\#/) { $sql .= $input_line; } } Obviously, you need to wrap this in a loop, but this is what is working now. I have added debugging printouts at various places above and can state that the SQL that goes through DBI does have a trailing semicolon, but not a trailing newline. Really weird. Best, Kyle -- Cut costs, Fax smart. Use iPrint2Fax worldwide and save! - iPrint2Fax software is FREE, no fax modem required. - FREE iPrint2Fax to a single email address. - iPrint2Fax to PSTN based Fax (Up to 95% Savings) - iPrint2Fax Broadcasting: Send 100s of faxes and fax to emails in the time it takes to send just one! ========================================== FREE software download available at www.iPrint2Fax.com ========================================== --------------------------------------------------------------------- Before posting, please check: http://www.mysql.com/manual.php (the manual) http://lists.mysql.com/ (the list archive) To request this thread, e-mail <[EMAIL PROTECTED]> To unsubscribe, e-mail <[EMAIL PROTECTED]> Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php