PHP函数中的MySQL连接会覆盖现有连接(其他数据库) - 如何防止这种情况?

时间:2012-10-19 16:55:45

标签: php mysql mysql-connect

我们在脚本开头打开与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:我们必须使用这种方法(函数),不能使用类。

非常感谢!

2 个答案:

答案 0 :(得分:4)

有关第二个参数link_identifier(MySQL连接)

,请参阅mysql_query的手册
  

如果未指定链接标识符,则打开最后一个链接   假设是mysql_connect()。

你也应该使用mysqli而不是旧的mysql。

答案 1 :(得分:0)

尝试将连接链接标识符作为第二个参数传递。

例如:

$connection1 = mysql_connect($host_1, $username_1, $password_1);
$connection2 = mysql_connect($host_2, $username_2, $password_2);
mysql_query('Query',$connection1);
mysql_query('Query',$connection2);