2011-02-04 32 views
0

我已经看过每一个地方,可能会搜索我的问题的每一个变化,我可以拿出来,我已经尝试了所有的建议......我试图连接到两个不同位置的两个不同的DB($ local和$ remote),只有第二个工作。这里是(“...” =隐藏)我的代码示例:PHP - 两个MySQL连接,只有第二个工作

//-------------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错误,说$本地没有定义或尝试使用$本地连接的MySQL函数期望参数是资源!?我知道这样一个事实,即两个连接都可以工作,因为它们都可以工作只有第二个连接($远程)工作...非常感谢您的任何建议!

+0

BTW:您的查询是对SQL注入打开的,请尝试使用[mysql_real_escape_string](http://www.php.net/manual/de/function.mysql-real-escape-string.php) – CodeZombie 2011-02-04 23:20:37

回答

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

2

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

ithin用户定义函数的 本地函数范围被引入[W]。 函数内使用的任何变量默认限制为 函数范围。

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

2

你是在一个函数中调用fncGrabNemsis。当你打开一个函数时,你会根据变量获得一个干净的平板。以前存在的变量不再这样做。 $local现在未定义。

解决这个问题的简单方法是设置$local全球价值:

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

全局可能不是一个好主意,但是。你应该重做你的代码,这样它们就不必要了。

1

我看你在使用$local函数里面,你应该使用global $local从函数范围内引用全局变量$local变量。