0

我到处寻找,可能在谷歌上搜索了我能想出的问题的每一个变体,我已经尝试了所有的建议......我正在尝试连接到两个不同位置的两个不同数据库($local 和 $远程),只有第二个有效。这是我的代码示例(“...”=隐藏):

//-------------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

4 回答 4

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

于 2011-02-04T22:53:17.553 回答
2

$local在您的函数中不可用。请阅读: http: //php.net/manual/en/language.variables.scope.php

[W]在用户定义的函数中引入了本地函数范围。默认情况下,函数内部使用的任何变量都仅限于本地函数范围。

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

于 2011-02-04T22:52:40.303 回答
2

您正在fncGrabNemsis从函数中调用。当你打开一个函数时,你会得到一个干净的变量。以前存在的变量不再起作用。$local现在未定义。

解决此问题的简单方法是设置$local为全局值:

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

然而,全局变量可能不是一个好主意。你应该重新编写你的代码,这样它们就没有必要了。

于 2011-02-04T22:53:37.017 回答
1

我看到您$local在函数内部使用,您应该使用从函数范围内global $local引用全局范围$local变量。

于 2011-02-04T22:57:07.880 回答