2012-12-28 37 views
0

我有点为这个问题疯狂。我自己做不到,所以我需要社区帮助我解决这个问题。我一直在这花费几个小时,因为我不知道该去哪里看。我现在知道一个可能的解决方法,但它只是混乱(阅读)。我只需要一个比我更了解这个的人。奇怪的mysql_多个连接问题

这是我的情况:

  • 我想用2个或更多的MySQL连接。
  • 我使用OOP

我有一类叫做质数据库,它有两个功能,setConnectiongetConnection和两个类变量称为$connection$dbaseName

在我的主项目文件包括我dBASE和创建两个对象:

  • 质数据库
  • maindbase

然后我做的:

$this->dbase->setConnection($server, $uname, $pword); 
$this->maindbase->setConnection($server, $uname, $pword); 

的setConnection功能外观像这样:

function setConnection ($server, $serv_Username, $serv_Password) { 
    $this->connection = mysql_connect($server, $serv_Username, $serv_Password, true); 
    // echo $this->connection . "<BR>"; 
} 

我赞同它看resourcenumber并添加真正到的mysql_connect(我知道,因为它5.5弃用,我不是在这里为)。

现在,据我所知,OOP,类变量是设置每个对象。因此,来自dbase的$连接将永远不会与maindbase相同(除非我使用相同的凭证,但即使如此,由于启用了$ new_link选项,它也会创建一个新链接)。他们都有不同的资源ID。

我的问题:

在类质数据库我也有它运行这样的查询功能:

$connection = $this->getConnection(); 
$dbase_name = $this->getDbaseName(); 
mysql_select_db($dbase_name, $connection); 
$q = "SELECT * FROM {$table_name} WHERE {$column} LIKE '{$value}'"; 
$result = mysql_query($q); 

现在,当我用它这样的,它总是使用第一个$连接这已经在类dbase中设置,并且它是哪个对象(无论是对象dbase还是maindbase)都没有关系。

我得到这个错误:

Table 'testdbase1.skye_domains' doesn't exist 

对象质数据库连接testdbase1

对象maindbase连接到testdbase2

上述错误试图选择使用maindbase对象的结果,当我得到。

当我从mysql_select_db中删除$connection字符串时,它完美地工作,因为它会尝试打开一个新的连接,就像使用mysql_connect一样。

这是为什么?这是不可能的吗?对象maindbase如何与对象dbase具有相同的$连接?他们没有办法连接到eachother ... PHP以某种方式使用我不知道的全局mysql_connect变量或缓冲区?

我想继续使用connectionstrings,因为这只是现在和当时的方便。离开$连接字符串似乎很混乱。

有没有人有任何建议,我可以尝试使PHP(或我的头)再次理智?

+0

为什么地球上还在使用'mysql_'函数? –

+0

@DC_“我知道它从5.5开始不推荐使用,我不是为了这个”已经提到 – swapnesh

+0

@swapnesh并不意味着我不能问。 –

回答

0

试着把echo $ this->连接放到你使用它的任何地方。另外,创建一个“id”成员并在构建一个dbase对象时使用唯一值填充它,并沿着$ this-> connection的值回显它。通过这种方式,您可以跟踪连接发生的情况。

并检查是否有某个地方外部的分配$ foo-> connection的类。如果你对会员没有使用“私人”,那么当你遇到这种情况时你肯定会遇到这样的问题。忘记从代码的无关部分删除黑客或实验。

+0

$ dbase_name字符串的功能与id相似。我呼应它,没关系。 (dbase将testdbase1作为$ dbase_name,而maindbase将testdbase2作为$ dbase_name)。 整个项目中只有两个使用setConnection的点,它在主项目类的__construct中,然后包含dbase类。 我只是doublechecked,我也有一个sessionmanager,它使用mysql_connect但它与dbase和maindbase对象没有任何关系! 即使当我将两个类变量设置为私有相同的问题。这真的很奇怪。 –

+0

我还通过getConnection在每个函数的顶部使用$ this-> connection,并将其传递给局部变量(局部变量,函数作用域)。所以这对于可能与连接字符串混淆的事情来说是超安全的。 –

+1

我知道最新错了!你使用mysql_query($ q),但你必须务必使用mysql_query($ q,$ this-> connection);! – Skynet