htmanning has asked for the wisdom of the Perl Monks concerning the following question:
#################################### ## Create database connection sub Conn_to_DB_Forums{ use DBI; $DSN = "DBI:mysql:me_forums:db.site.com"; $sqluser = "me1"; $sqlpass = "12345"; $dbh = DBI->connect($DSN,$sqluser,$sqlpass) || die "Cannot connect: $DBI::errstr\n" unless $dbh; return; } ## end of connect to DB subroutine #################################### #################################### ## Create database connection sub Conn_to_DB{ use DBI; $DSN = "DBI:mysql:me_content:db1.site.com"; $sqluser = "me2"; $sqlpass = "67890"; $dbh = DBI->connect($DSN,$sqluser,$sqlpass) || die "Cannot connect: $DBI::errstr\n" unless $dbh; return; } ## end of connect to DB subroutine #################################### #################################### ## Exec SQL command sub Do_SQL{ eval { $sth = $dbh->prepare($SQL); }; # end of eval # check for errors if($@){ $dbh->disconnect; print "Content-type: text/html\n\n"; print "An ERROR occurred! $@\n"; exit; } else { $sth->execute; } # end of if/else return ($sth); } ## End of Do_SQL subroutine ##################################### #################################### ## Exec SQL2 command sub Do_SQL2{ eval { $sth2 = $dbh->prepare($SQL2); }; # end of eval # check for errors if($@){ $dbh->disconnect; print "Content-type: text/html\n\n"; print "An ERROR occurred! $@\n"; exit; } else { $sth2->execute; } # end of if/else return ($sth2); } ## End of Do_SQL2 subroutine #####################################
SO... This script allows people to post opinions. In the script I do this:
if ($submit || $preview) { &Conn_to_DB_Forums; $SQL = "SELECT * from $forum_table WHERE (username='$username' AND + user_password!='$user_password' AND user_active='1')"; &Do_SQL; &error(not_registered) unless ($pointer = $sth->fetchrow_hashref); I do some other stuff here...then disconnect. $sth->finish(); $dbh->disconnect; } if ($submit) { &Conn_to_DB; $SQL = "SELECT * from $op_tbl WHERE (prodID='$prodID' AND dateadde +d='$dateadded' AND prodtype='$prodtype' AND (username='$username' OR +title='$titlefix'))"; # run SQL against the DB &Do_SQL; &error(no_spam) if ($pointer = $sth->fetchrow_hashref); $SQL = "INSERT INTO $op_tbl (username,name,email,location,features +,usability,title,body,dateadded,prodID,prodtype) VALUES ('$username','$namefix','$emailfix','$locationfix','$fe +atures','$usability','$titlefix','$bodyfix','$dateadded','$prodID','$ +prodtype')"; # run SQL against the DB &Do_SQL; $pointer = $sth->fetchrow_hashref; $filename = $pointer->{'filename'}; }
The $filename field doesn't get set which means I'm not connecting successfully to the 2nd databsae. I think the deal is that I'm not disconnecting from the first database because if I leave that call out (&Conn_to_DB_Forums;), everything else works.
I can also leave these two disconnect lines out, and it makes no difference:
$sth->finish();
$dbh->disconnect;
I hope my question makes sense. Is there a way to get out of the first database and then read from a 2nd? Thanks!
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Connecting to 2 mysql database in one script
by jfroebe (Parson) on Nov 21, 2008 at 22:31 UTC | |
by htmanning (Friar) on Nov 21, 2008 at 22:55 UTC |