我对这个问题有点疯狂。我不能自己做,所以我需要社区来帮助我解决这个问题。我一直在花这些时间,因为我不知道在哪里看。我现在知道一个可能的修复,但它只是凌乱(阅读)。我只需要一个比我更了解这一点的人。
这是我的情况:
我有一个名为dbase的类,它有两个函数setConnection
和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中设置的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(或我的脑袋)再次理智?
答案 0 :(得分:0)
尝试将echo $ this-&gt;连接放在你使用它的任何地方。此外,创建一个“id”成员并在构造dbase对象时使用唯一值填充它,并沿$ this-&gt; connection的值回显它。这样,您就可以跟踪连接发生的位置。
并检查是否可能在类外的某个位置分配$ foo-&gt;连接。如果你没有在会员身上使用“私人”,那么你就会遇到这样的问题。忘记从代码中不相关的部分删除黑客或实验。