我们在脚本的开头打开了一个到 host_1 的 MySQL 连接。在两者之间的某个地方,我们调用一个函数来打开和关闭与 host_2 的连接(函数 retrieve_information_from_host_2)。
不幸的是,函数之后的代码调用仍然使用函数(host_2)的连接。
虽然我们需要它来继续前面的连接 host_1。
<?php
function retrieve_information_from_host_2($host_2, $username_2, $password_2, $database_2) {
$connection = mysql_connect($host_2, $username_2, $password_2);
if($connection) {
if(mysql_select_db($database_2)) {
$sql = "SELECT * FROM table WHERE id = 1;";
$erg = mysql_query($sql);
$row = mysql_fetch_assoc($erg);
return $row;
}
mysql_close($connection);
}
}
if(mysql_connect($host_1, $username_1, $password_1)) {
if(mysql_select_db($database_1)) {
$sql = "SELECT * FROM table WHERE id = 1;";
$erg = mysql_query($sql);
$row = mysql_fetch_assoc($erg); # CORRECT - This returns data from host 1
$row_host_2 = retrieve_information_from_host_2(); # CORRECT - This returns data from host 2
$sql = "SELECT * FROM table WHERE id = 2;";
$erg = mysql_query($sql);
$row = mysql_fetch_assoc($erg); # WRONG - This returns data from host 2 instead of host 1
}
mysql_close();
}
?>
我们通过为每个连接命名来尝试几乎所有组合
$connection_1 = mysql_connect($host_1, $username_1, $password_1);
...
mysql_close($connection_1);
并明确关闭它们等
没有任何帮助。有人可以给我们解决这个问题吗?
PS:我们受限于这种方法(函数),不能使用类。
非常感谢!
最佳答案
请参阅 mysql_query 的手册对于第二个参数link_identifier(MySQL连接)
If the link identifier is not specified, the last link opened by mysql_connect() is assumed.
您还应该使用 mysqli 而不是旧的 mysql。
关于php - PHP 函数中的 MySQL 连接会覆盖现有连接(其他数据库)——如何防止这种情况发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12978920/