0

我对这个问题有点发疯了。我自己做不到,所以我需要社区帮助我解决这个问题。我一直在这上面花了几个小时,因为我不知道去哪里找。我现在知道一个可能的解决方法,但它只是一团糟(继续阅读)。我只需要一个比我了解更多的人。

这是我的情况:

  • 我想使用 2 个或更多 mysql 连接。
  • 我使用面向对象

我有一个名为 dbase 的类,它有两个函数setConnection和两个名为and的getConnection类变量。$connection$dbaseName

在我的主项目文件中,我包含 dbase 并创建了两个对象:

  • 数据库
  • 主库

然后我做:

$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 中设置的第一个 $connection 并且它是哪个对象都没有关系,无论是对象 dbase 还是maindbase.

我收到此错误:

Table 'testdbase1.skye_domains' doesn't exist

对象 dbase 连接到 testdbase1

对象maindbase连接到 testdbase2

尝试使用maindbase对象选择结果时出现上述错误。

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

为什么是这样?这是不可能的吧?对象如何maindbase具有与对象 dbase 相同的 $connection?它们无法相互连接... PHP 是否以某种方式使用了我不知道的全局 mysql_connect 变量或缓冲区?

我想继续使用connectionstrings,因为它时不时地很方便。留下 $connection 字符串似乎很乱。

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

4

1 回答 1

0

尝试在任何使用它的地方放置 echo $this->connection。此外,创建一个“id”成员并在构造 dbase-object 时用唯一值填充它,并沿 $this->connection 的值回显它。通过这种方式,您可以跟踪连接发生的位置。

并检查在类之外是否有某个地方分配了 $foo->connection。如果您没有在成员上使用“私人”,那么当您忘记从代码的不相关部分删除黑客或实验时,您一定会遇到此类问题。

于 2012-12-28T05:59:31.747 回答