我对这个问题有点发疯了。我自己做不到,所以我需要社区帮助我解决这个问题。我一直在这上面花了几个小时,因为我不知道去哪里找。我现在知道一个可能的解决方法,但它只是一团糟(继续阅读)。我只需要一个比我了解更多的人。
这是我的情况:
- 我想使用 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(或我的头脑)再次变得理智?