Re: Two MySQL connections in one script not working as expected
| From: | Charles Kline | Date: | Tue, 27 Sep 2005 21:46:03 +0000 |
| Subject: | Re: Two MySQL connections in one script not working as expected | ||
| References: | 1 2 3 4 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-223319@lists.php.net to get a copy of this message | ||
On Sep 27, 2005, at 5:23 PM, M. Sokolewicz wrote:
Charles Kline wrote:Hmm... still getting the same results. Here is my modified class files: class db { // database setup. These should be changed accordingly. var $dbpath = "localhost"; var $dbname = "blah1"; var $dblogin = "test"; var $dbpass = "test"; function db() {On Sep 27, 2005, at 3:42 PM, Andy Pieters wrote:dbpass) or die ('Not Connected: ' . mysql_error());Hi Without you actually showing us these class files we can only guess but a common mistake is this: mysql_open(connection details) mysql_query(query) In those cases the last opened handle is used. To prevent this, use this syntax $db1=mysql_open(connection for db1); $db2=mysql_open(connection for db2); mysql_query($db1,$query_db_1); mysql_query($db2,$query_db_2); If you have used this syntax then check your class if it is using a global variable to hold the database handle and if it does make it a class variable instead Instead of $db=null class db {function db() {$GLOBALS['db']=mysql_open(... do instead class db {var $db=null; function db() {$this->db=mysql_open That way you can instanciate as many instances of the class as you like and each will have its own database handle. HTH AndyWhat I have is more like this: class db { var $dbpath = "localhost"; var $dbname = "testdb"; var $dblogin = "test"; var $dbpass = "test"; function db() {$link = mysql_connect($this->dbpath, $this->dblogin, $this-mysql_select_db($this->dbname, $link) or die ('Can\'t use this database: ' . mysql_error()); } function retrieveData( $sql ) {that's where it's going wrong. You're not linking db::db()'s link in the db::insertData() mysql_query() function. Thus, the mysql_query function defaults to the "last opened mysql connection" regardless of object. A way to fix this is to store the link in $this->link instead, and changing your mysql_query()'s to mysql_query($sql, $this->link); same goes for your mysql_affected_rows() and mysql_insert_id() functions -tul$rs = mysql_query( $sql ) or die("Invalid query: " . mysql_error ()); // if no result, return null if (($rs == null) || (mysql_num_rows($rs) == 0)) { return null; } else { return ( $rs ); }} function insertData( $sql ) {mysql_query( $sql ); // return new id if insert is successful if ( mysql_affected_rows() > 0 ) { return ( mysql_insert_id() ); } else { return null; }} function updateData( $sql ) {$rs = mysql_query( $sql ); if (mysql_affected_rows() > 0) { return ( $rs ); } else { return null; // no changes were made }} } I then have another class with a different name and I changed the names of the functions as well. I have another set of class files that contain my various queries etc. Thanks for any help. Charles
$this->link = mysql_connect($this->dbpath, $this->dblogin, $this-} function retrieveData( $sql ) {dbpass) or die ('Not Connected: ' . mysql_error()); mysql_select_db($this->dbname, $this->link) or die ('Can\'t use this database: ' . mysql_error());
$rs = mysql_query( $sql,$this->link ) or die("Invalid query: " . mysql_error());
// if no result, return null
if (($rs == null) || (mysql_num_rows($rs) == 0)) {
return null;
} else {
return ( $rs );
}
}
function insertData( $sql ) {
mysql_query( $sql,$this->link );
// return new complaint id if insert is successful
if ( mysql_affected_rows($this->link) > 0 ) {
return ( mysql_insert_id($this->link) );
} else {
return null;
}
}
function updateData( $sql ) {
$rs = mysql_query( $sql,$this->link );
if (mysql_affected_rows($this->link) > 0) {
return ( $rs );
} else {
return null; // no changes were made
}
}
}
and stored in another file...
class db2 {
// database setup. These should be changed accordingly.
var $dbpath = "localhost";
var $dbname = "blah2";
var $dblogin = "test";
var $dbpass = "test";
function dbzen() {
$this->link = mysql_pconnect($this->dbpath, $this->dblogin, $this->dbpass) or die ('Not Connected: ' . mysql_error());
mysql_select_db($this->dbname, $this->link) or die ('Can\'t use this database: ' . mysql_error());
}
function retrieveZenData( $sql ) {
$rs = mysql_query( $sql,$this->link ) or die("Invalid query: " . mysql_error());
// if no result, return null
if (($rs == null) || (mysql_num_rows($rs) == 0)) {
return null;
} else {
return ( $rs );
}
}
function insertZenData( $sql ) {
mysql_query( $sql,$this->link ) or die("Invalid query: " . mysql_error());
// return new complaint id if insert is successful
if ( mysql_affected_rows($this->link) > 0 ) {
return ( mysql_insert_id($this->link) );
} else {
return null;
}
}
function updateZenData( $sql ) {
$rs = mysql_query( $sql,$this->link );
if (mysql_affected_rows($this->link) > 0) {
return ( $rs );
} else {
return null; // no changes were made
}
}
}