ID: 35993
User updated by: andreas at fink dot org
Reported By: andreas at fink dot org
-Status: Bogus
+Status: Open
Bug Type: MySQL related
Operating System: MacOS X & Linux
PHP Version: 5.1.2
New Comment:
<?
$db1_handle=mysql_connect("127.0.0.1","test","test");
mysql_select_db("test1",$db1_handle);
$db2_handle=mysql_connect("127.0.0.1","test","test", true);
mysql_select_db("test2",$db2_handle);
$query = "select data from testdata where id=1";
$result1 = mysql_query($query,$db1_handle);
if($result1)
{
$line = mysql_fetch_row ( $result1 );
echo "This query was executed on db1_handle:" .$line[0] ."\n";
}
else
echo mysql_error()."\n";
$query = "select data from testdata2 where id=1";
$result2 = mysql_query($query,$db2_handle);
if($result2)
{
$line = mysql_fetch_row ( $result2 );
echo "This query was executed on db2_handle:" .$line[0] ."\n";
}
else
echo mysql_error()."\n";
?>
Returns:
vpn5:~ afink$ php test.php
This query was executed on db1_handle:This is DB named test1
No database selected
vpn5:~ afink$
So what you say now? Is my brain really that damaged that I can not see
what's wrong here? I had working code using two concurrent mysql
connections not working anymore after upgrading php to a more recent
version without doing changes to the code. And I've seen other people
with similar problems. I agree that using pconnect in this scenario
makes it somehow not obvious as you expect the change of database to be
on your resource id only and not on another one (non obvious) but you
want to avoid to have to connect/disconnect every time. My thinking was
that pconnect returns a connection out of a pool and returns it to the
pool at the end and not really using the same one [you can blame me for
getting that wrong]. The main reason why you want to have multiple
connections is because you read through a list of items on one
connection (loop with mysql_fetch_row) while doing other things like
queries and inserts on the second conncetion. Doing this on the first
connection makes it loose its context of the query. This is obviously a
problem for many developers.
However above code shows that there IS DEFINITIVELY a problem.
Previous Comments:
------------------------------------------------------------------------
[2006-01-14 09:34:20] [EMAIL PROTECTED]
Please stop to reopen this bug, add proper error handling instead to
your source and check why you're getting an invalid result.
------------------------------------------------------------------------
[2006-01-13 18:36:44] andreas at fink dot org
$db1_handle=mysql_connect("127.0.0.1","test","test");
mysql_select_db("test1",$db1_handle);
$db2_handle=mysql_connect("127.0.0.1","test","test", true);
mysql_select_db("test2",$db2_handle);
gives:
array(1) {
[0]=>
string(8) "testdata"
}
---------------------------
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL
result resource in /Users/afink/test2.php on line 19
Now is this a bug or not?
------------------------------------------------------------------------
[2006-01-13 18:30:12] [EMAIL PROTECTED]
>$db1_handle=mysql_pconnect("127.0.0.1","test","test");
>$db2_handle=mysql_pconnect("127.0.0.1","test","test", true);
Do you read what I'm writing or you just ignore it?
Try to open the docs and read whether the 4th parameter of
mysql_Pconnect() is the same as the 4th parameter of mysql_Connect().
Again, you're using THE SAME PERSISTENT CONNECTION returned by
Pconnect().
Please stop reopening this report, there is no bug.
------------------------------------------------------------------------
[2006-01-13 18:19:47] andreas at fink dot org
Gosh. Please CHECK what I provided before putting it to bogous again.
THIS IS DEFINITIVELY A BUG. It just doesnt occur in all scenarios. Your
code works here too but mine doesn't and its not obvious why not. It
apparently depends what you do with Mysql and what user you use.
Test EXACTLY THIS and not with user "root" or anything else:
1st. rename table testdata to testdata2 in database test2
2nd:
<?php
$db1_handle=mysql_pconnect("127.0.0.1","test","test");
mysql_select_db("test1",$db1_handle);
$db2_handle=mysql_pconnect("127.0.0.1","test","test", true);
mysql_select_db("test2",$db2_handle);
$query = "show tables";
$result1 = mysql_query($query,$db1_handle);
while ($line = mysql_fetch_row ( $result1 ) ) {
var_dump($line);
}
echo "---------------------------\n";
$query = "show tables";
$result2 = mysql_query($query,$db2_handle);
while ($line = mysql_fetch_row ( $result2 ) ) {
var_dump($line);
}
?>
results in:
vpn5:~ afink$ php test2.php
array(1) {
[0]=>
string(8) "testdata"
}
---------------------------
array(1) {
[0]=>
string(8) "testdata"
}
The SECOND one however MUST BE "testdata2"
So its doing it at the WRONG DB.
mysql> use test1
Database changed
mysql> show tables;
+-----------------+
| Tables_in_test1 |
+-----------------+
| testdata |
+-----------------+
1 row in set (0.01 sec)
mysql> use test2
Database changed
mysql> show tables;
+-----------------+
| Tables_in_test2 |
+-----------------+
| testdata2 |
+-----------------+
1 row in set (0.00 sec)
mysql>
------------------------------------------------------------------------
[2006-01-13 17:58:28] [EMAIL PROTECTED]
<?php
$db1_handle=mysql_connect("127.0.0.1","root","", true);
mysql_select_db("test",$db1_handle);
$db2_handle=mysql_connect("127.0.0.1","root","", true);
mysql_select_db("mysql",$db2_handle);
$query = "show tables";
$result1 = mysql_query($query,$db1_handle);
while ($line = mysql_fetch_row ( $result1 ) ) {
var_dump($line);
}
echo "---------------------------\n";
$query = "show tables";
$result2 = mysql_query($query,$db2_handle);
while ($line = mysql_fetch_row ( $result2 ) ) {
var_dump($line);
}
?>
This code works perfectly here.
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/35993
--
Edit this bug report at http://bugs.php.net/?id=35993&edit=1