0

我正在处理使用mysql数据库操作功能的旧现有项目。现有系统连接到数据库,例如cdcol. 可以通过站点明智地连接到该数据库。现在我想从另一个数据库中获取数据crawlerdb,将获取的数据分配给一个数组并关闭与该数据库的连接。与第二个数据库的连接在函数 sayGetAccess中,每次需要额外数据时,都会调用该函数,获取数据并关闭与第二个数据库的连接。我想要的是每次都应该可以连接到第一个数据库。

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

<?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);


?>

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

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

任何帮助将不胜感激,谢谢!

谢谢莎米拉

4

1 回答 1

1

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

(全局变量!让我们像 1999 年一样狂欢吧!)

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

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

于 2013-06-29T12:14:03.560 回答