Tuesday, August 18, 2009

php_mysql my_select_db 多库交叉使用的bug

<?php
$db_1 = mysql_connect('localhost', 'root', 'root');
mysql_select_db('ftpunion', $db_1);

var_dump(mysql_fetch_assoc(mysql_query('select database();', $db_1)));

$db_2 = mysql_connect('localhost', 'root', 'root');
mysql_select_db('ftpunion_new', $db_2);

var_dump(mysql_fetch_assoc(mysql_query('select database();', $db_2)));

#mysql_select_db('ftpunion', $db_1);
var_dump(mysql_fetch_assoc(mysql_query('select database();', $db_1)));


结果是。。。
array(1) {
["database()"]=>
string(8) "ftpunion"
}
array(1) {
["database()"]=>
string(12) "ftpunion_new"
}
array(1) {
["database()"]=>
string(12) "ftpunion_new"
}

一个页面使用 相同的用户名和密码 连接使用 相同服务器 不同的库 的时候,只能是在切换库查询的时候,先得对对应的mysql 连接资源进行一次 mysql_select_db 操作,然后再执行查询

要不然你只能得到一个 错误的库.正确的表 不存在 的提示。。。因为貌似这个过程 php_mysql 实际只创建了一个连接,查询的库以最近一次的mysql_select_db的操作为准。。。。

sleep了20秒,看看netstat出来的链接数。。。。只有这一个

G:\Projects\sina\Slot>netstat -ano | find "4320"
TCP 127.0.0.1:1244 127.0.0.1:3306 ESTABLISHED 4320



其实这算是一个无奈的选择,

去给php 报bugs去。。。只是不知道这算不算bug
或者说。。。。It's not a bug, it's a feature, not sure if it's expected or not.


昨晚这个折腾了好久
好不容易写的类,不可能有逻辑问题,结果发现是这个2问题。。。

No comments:

Post a Comment