在始终可以连接到第一个数据库时,经常从第二个数据库获取数据

时间:2013-06-29 10:36:40

标签: php mysql

我正在处理使用mysql函数进行数据库操作的旧现有项目。现有系统连接到数据库,例如cdcol。可以通过站点方式获得与此数据库的连接。 现在我想从另一个数据库中获取数据crawlerdb,将获取的数据分配给一个数组并关闭与该数据库的连接。与第二个数据库的连接位于函数say GetAccess内,每次需要额外数据时,调用该函数,获取数据并关闭第二个数据库的连接。 我想要的只是每次都可以连接到第一个数据库。

我面临的问题是。如果我没有关闭连接到第二个数据库。然后在调用函数GetAccess之后使用mysql查询,仍然从第二个数据库中搜索项目,因为与第二个数据库的连接是活动的。如果我关闭与第二个数据库的连接,查询仍然无效。以下代码解释了我的情况。

<?php
//$conn1 is permanent connection that is used sitewise.
$conn1=mysql_connect("localhost","root","",true) or die(mysql_error());
mysql_select_db("cdcol",$conn1) or die(mysql_error());
echo "1. Current Database = ".mysql_current_db();//prints cdcol
echo "<Br> Function Returned Value = ".GetAccess();

echo "<Br>2. Current Database = ".mysql_current_db(); //In GetAccess function, which is called above if mysql_close($conn2) is used, the mysql_current_db() returns empty value.

//A FUNCTION TO GET EXTRA DATA FROM SECOND DATABASE
function GetAccess(){
    $conn2=mysql_connect("localhost","root","",true) or die(mysql_error());
    mysql_select_db("crawlerdb",$conn2) or die(mysql_error());
    $test=mysql_query("select * from tbllensinfo",$conn2); //here i have used $conn2 as link identifier
    $var= mysql_num_rows($test);
    mysql_close($conn2);
    return $var;
}

//FUNCTION TO IDENTIFY WHICH DATABASE IS CURRENTLY BEING USED
function mysql_current_db() {
    $r = mysql_query("SELECT DATABASE()") or die(mysql_error());
    return mysql_result($r,0);
}
$res=mysql_query("select * from cds"); //here link identifier $conn1 is not used, i cant change this code because there are several 100s codes, so not possible to change in all of them. Everything will work if $conn1 is used here though
echo "<br>".mysql_num_rows($res);


?>

注意: 这两个数据库托管在同一台服务器上,但数据库用户不同,其中一个用户无法访问其他数据库。

所以简而言之我需要的是我需要经常从第二个数据库获取数据,而第一个数据库的连接始终可用。

任何帮助都会非常值得感谢,谢谢!

由于 Sharmila

1 个答案:

答案 0 :(得分:1)

mysql函数(例如mysql_query)都有一个可选的resource参数,用于标识要使用的数据库连接。如果省略第二个参数,则函数使用最近打开的连接。也就是说,他们使用最近调用mysql_connect产生的连接。即使你已经关闭它,它也被认为是最新的结果。

(全球变量!让我们的派对就像是1999年!)

如果您要在程序中使用多个与mysql调用的连接,则必须在程序中所有 resource次调用中指定mysql_*参数。

请考虑切换到PDO或mysqli。 PHP人员多年来一直试图摆脱这个mysql API,部分原因是这个问题,主要是因为它有严重的不安全感。