PHP - 两个MySQL连接,只有第二个工作

时间:2011-02-04 22:48:49

标签: php mysql connection mysql-select-db

我看过每一个地方,可能用Google搜索我提出的问题的每一个变化,我已经尝试了所有的建议......我正在尝试连接到两个不同位置的两个不同的数据库($本地和$远程)只有第二个工作。这是我的代码示例(“...”=隐藏):

//-------------Local DB Connection:
    $local = mysql_connect("localhost","root","...");
    if (!$local)
    {
        die('Could not connect: ' . mysql_error());
    }
    $sel1 = mysql_select_db("new", $local);
//-------------Remote DB Connection:
    $remote = mysql_connect("...","...","...",true);
    if (!$remote)
    {
        die('Could not connect: ' . mysql_error());
    }
    $table = "...";

//---------function selecting from local:
    function fncGrabNemsis($ele,$val){
        mysql_select_db("new", $local);
        $result = mysql_query("SELECT * FROM new.tblvalues
        WHERE fldelement='$ele' AND fldcode='$val'",$local);
        $tmprow = mysql_fetch_array($result);
        return (isset($tmprow['fldvariable'])?$tmprow['fldvariable']:$val);
    }

//----------Select run from Remote:
        mysql_select_db("ImdxTest", $remote);
        $result = mysql_query("SELECT * FROM ImdxTest.$table WHERE ClientID = ... AND IncidentNum = '$fldINCID'", $remote) or die(mysql_error());
        $row = mysql_fetch_array($result);

我已经尝试过将mysql_select_db()函数调用到你能想到的所有地方以及其他所有内容......发生的事情是,我得到php错误,说$ local未定义或正在尝试的mysql函数使用$ local连接期望参数是资源!?我知道两个连接都可以工作,因为它们都是有效的。只有第二个连接($ remote)有效...非常感谢任何建议!

4 个答案:

答案 0 :(得分:3)

fncGrabNemsis需要全局变量$local

    function fncGrabNemsis($ele,$val){
        global $local;
        mysql_select_db("new", $local);
        $result = mysql_query("SELECT * FROM new.tblvalues
        WHERE fldelement='$ele' AND fldcode='$val'",$local);
        $tmprow = mysql_fetch_array($result);
        return (isset($tmprow['fldvariable'])?$tmprow['fldvariable']:$val);
    }

这可以帮助您更好地理解:http://php.net/manual/en/language.variables.scope.php

答案 1 :(得分:2)

您的功能中没有

$local。请阅读:http://php.net/manual/en/language.variables.scope.php

  

[W]用户定义的函数a   本地功能范围介绍。   函数内使用的任何变量都是   默认情况下仅限于本地   功能范围。

在PHP中,与许多其他语言相反,外部范围在函数内是不可用的。您必须将变量作为参数传递(首选解决方案)或使用gloabal关键字从全局范围导入变量。

答案 2 :(得分:2)

您正在函数中调用fncGrabNemsis。当你打开一个函数时,你会得到一个关于变量的清单。以前存在的变量不再存在。 $local现在未定义。

简单的方法是将$local设置为全局值:

function fncGrabNemsis($ele,$val){
    global $local; 
    mysql_select_db("new", $local);
    ...

然而,全局可能不是一个好主意。您应该重新编写代码,以便它们不必要。

答案 3 :(得分:1)

我发现你在函数中使用$local,你应该使用global $local从函数范围内引用全局范围$local变量。