奇怪的mysql_多个连接问题

时间:2012-12-28 05:38:59

标签: php mysql connection

我对这个问题有点疯狂。我不能自己做,所以我需要社区来帮助我解决这个问题。我一直在花这些时间,因为我不知道在哪里看。我现在知道一个可能的修复,但它只是凌乱(阅读)。我只需要一个比我更了解这一点的人。

这是我的情况:

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

我有一个名为dbase的类,它有两个函数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并将 true 添加到mysql_connect(我知道它自5.5以来已被弃用,我不在此处。)

现在,据我了解OOP,每个对象都设置了类变量。所以来自dbase的$ connection永远不会与maindbase相同(当然,除非我使用相同的凭据,但即使这样,由于我启用了$ new_link选项,它也会创建一个新的链接)。它们都有不同的资源ID。

我的问题:

在类dbase中,我还有一个运行如下查询的函数:

$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中设置的FIRST $连接,无论是对象dbase还是maindbase都无关紧要。

我收到此错误:

Table 'testdbase1.skye_domains' doesn't exist

object dbase连接到testdbase1

对象maindbase已连接到testdbase2

我在尝试使用maindbase对象选择结果时遇到上述错误。

当我从$connection中删除mysql_select_db字符串时,它可以正常运行,因为它会尝试打开新连接,就像使用mysql_connect一样。

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

我想继续使用connectionstrings因为这只是偶然使用。保留$连接字符串似乎很麻烦。

有没有人有任何建议我可以尝试让PHP(或我的脑袋)再次理智?

1 个答案:

答案 0 :(得分:0)

尝试将echo $ this-&gt;连接放在你使用它的任何地方。此外,创建一个“id”成员并在构造dbase对象时使用唯一值填充它,并沿$ this-&gt; connection的值回显它。这样,您就可以跟踪连接发生的位置。

并检查是否可能在类的某个位置分配$ foo-&gt;连接。如果你没有在会员身上使用“私人”,那么你就会遇到这样的问题。忘记从代码中不相关的部分删除黑客或实验。