Bug #14906 Updated: The function mysql_select_db set the db for other link ids than specified.

2002-03-11 Thread mfischer

 ID:   14906
 Updated by:   [EMAIL PROTECTED]
 Reported By:  [EMAIL PROTECTED]
-Status:   Open
+Status:   Closed
 Bug Type: MySQL related
 Operating System: RedHat 7.1
 PHP Version:  4.1.0
 New Comment:

This is a known limitation and a workaround exists in current CVS and
upcomming 4.2.0 version which has a new, additional/optional parameter
to mysql_connect() [NOT! pconnect!] which forces the creation of a
truly new link and not re-use an existing one.


Previous Comments:


[2002-03-11 07:24:13] [EMAIL PROTECTED]

On my Slackware 3.6 box (not that it matters, since everything has been
built from source [php 4.0.6, 4.1.1 and 4.1.2, mysql 3.22.30]), I get
essentially the same results.  I don't remember if the resource IDs
were the same, but I rewrote a few of my database libraries because of
this.

Basically, I had to write my database wrappers to never select a
database and always user mysql_db_query() because if someone using the
library connected with the same host/user/pass and selected a database,
the most current one would be used by both/all connections.

Please don't take mysql_db_query() away until this is sorted out.  (and
maybe not even then)  :)



[2002-01-07 07:27:54] [EMAIL PROTECTED]

PHP 4.1.0 and MySQL 3.23.41-log

The function mysql_select_db set the db for other link
identifiers than specified.

Doc:
bool mysql_select_db (string database_name, resource
[link_identifier])
mysql_select_db() sets the current active database on the server that's
associated with the specified link identifier. If no link identifier is
specified, the last opened link is assumed. If no link is open, the
function will try to establish a link as if mysql_connect() was called
without arguments, and use it. 

The table my_table is in db1 but the active database
seems to be test on link #8.

Here the result:
mysql_pconnect() id1=Resource id #8
mysql_select_db(db1,Resource id #8)
mysql_pconnect() id2=Resource id #9
mysql_select_db(test,Resource id #9)
mysql_query(select * from my_table,Resource id #8)
failed: Table 'test.my_table' doesn't exist

Here the source:
$id1=mysql_pconnect($host,$user,$pass);
if($id1==false){
die("mysql_pconnect() failed: ".mysql_error());
}
echo "mysql_pconnect() id1=$id1";

$b=mysql_select_db($db1,$id1);
if($b==false){
die("mysql_select_db($db1,$id1)
failed:".mysql_error());
}
echo "mysql_select_db($db1,$id1)";

$id2=mysql_pconnect($host,$user,$pass);
if($id2==false){
echo "mysql_pconnect() failed: ".mysql_error();
}
echo "mysql_pconnect() id2=$id2";

$b=mysql_select_db($db2,$id2);
if($b==false){
die("mysql_select_db($db2,$id2)
failed:".mysql_error());
}
echo "mysql_select_db($db2,$id2)";

$sql='select * from my_table';
$result=mysql_query($sql,$id1);
if($result==false){
die("mysql_query($sql,$id1)
failed:".mysql_error());
}





-- 
Edit this bug report at http://bugs.php.net/?id=14906&edit=1




Bug #14906 Updated: The function mysql_select_db set the db for other link ids than specified.

2002-03-11 Thread newspost

 ID:   14906
 Updated by:   [EMAIL PROTECTED]
 Reported By:  [EMAIL PROTECTED]
 Status:   Open
 Bug Type: MySQL related
 Operating System: RedHat 7.1
 PHP Version:  4.1.0
 New Comment:

On my Slackware 3.6 box (not that it matters, since everything has been
built from source [php 4.0.6, 4.1.1 and 4.1.2, mysql 3.22.30]), I get
essentially the same results.  I don't remember if the resource IDs
were the same, but I rewrote a few of my database libraries because of
this.

Basically, I had to write my database wrappers to never select a
database and always user mysql_db_query() because if someone using the
library connected with the same host/user/pass and selected a database,
the most current one would be used by both/all connections.

Please don't take mysql_db_query() away until this is sorted out.  (and
maybe not even then)  :)


Previous Comments:


[2002-01-07 07:27:54] [EMAIL PROTECTED]

PHP 4.1.0 and MySQL 3.23.41-log

The function mysql_select_db set the db for other link
identifiers than specified.

Doc:
bool mysql_select_db (string database_name, resource
[link_identifier])
mysql_select_db() sets the current active database on the server that's
associated with the specified link identifier. If no link identifier is
specified, the last opened link is assumed. If no link is open, the
function will try to establish a link as if mysql_connect() was called
without arguments, and use it. 

The table my_table is in db1 but the active database
seems to be test on link #8.

Here the result:
mysql_pconnect() id1=Resource id #8
mysql_select_db(db1,Resource id #8)
mysql_pconnect() id2=Resource id #9
mysql_select_db(test,Resource id #9)
mysql_query(select * from my_table,Resource id #8)
failed: Table 'test.my_table' doesn't exist

Here the source:
$id1=mysql_pconnect($host,$user,$pass);
if($id1==false){
die("mysql_pconnect() failed: ".mysql_error());
}
echo "mysql_pconnect() id1=$id1";

$b=mysql_select_db($db1,$id1);
if($b==false){
die("mysql_select_db($db1,$id1)
failed:".mysql_error());
}
echo "mysql_select_db($db1,$id1)";

$id2=mysql_pconnect($host,$user,$pass);
if($id2==false){
echo "mysql_pconnect() failed: ".mysql_error();
}
echo "mysql_pconnect() id2=$id2";

$b=mysql_select_db($db2,$id2);
if($b==false){
die("mysql_select_db($db2,$id2)
failed:".mysql_error());
}
echo "mysql_select_db($db2,$id2)";

$sql='select * from my_table';
$result=mysql_query($sql,$id1);
if($result==false){
die("mysql_query($sql,$id1)
failed:".mysql_error());
}





-- 
Edit this bug report at http://bugs.php.net/?id=14906&edit=1