2011-02-04 4 views
0

나는 모든 곳을 보았습니다. 아마도 내 질문의 모든 변형을 찾아 낼 수 있었고 모든 제안을 시도했습니다 ... 연결하려고합니다. 두 개의 서로 다른 위치에있는 두 개의 서로 다른 DB ($ local과 $ remote)에 연결하고 두 번째 DB 만 작동합니다. 나는 반환 mysql_select_db를 이동하려고했습니다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); 

() 함수는 당신이 생각할 수있는 모든 곳에서 호출하고 단지 다른 모든 것들에 대해 ... 어떻게됩니까 : 여기에 ("..."= 숨김) 내 코드의 샘플입니다 $ local이 정의되어 있지 않거나 $ 로컬 연결을 사용하려고하는 mysql 함수가 매개 변수가 리소스가 될 것으로 예상한다는 PHP 오류가 발생합니다. 저는 두 연결이 개별적으로 작동하기 때문에 두 연결이 모두 작동한다는 사실을 알고 있습니다. 두 번째 연결 ($ remote) 만 작동합니다 ... 모든 제안에 대해 감사드립니다!

+0

BTW : 귀하의 쿼리는 SQL injections에 열려 있습니다. [mysql_real_escape_string] (http://www.php.net/manual/de/function.mysql-real-escape-string.php)을 사용해보십시오. – CodeZombie

답변

3

fncGrabNemsis 전역 변수 $local이 필요합니다. 함수를 열면 변수로 깨끗한 상태가됩니다. 이전에는 존재하지 않는 변수는 더 이상 존재하지 않습니다. $local은 이제 정의되지 않았습니다.

이 주위에 쉬운 방법은 글로벌 값으로 $local을 설정하는 것입니다 :

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

전역 그러나, 아마 좋은 생각이 아니다. 불필요하도록 코드를 다시 작성해야합니다.

2

$local은 (는) 귀하의 기능에서 사용할 수 없습니다. 이를 참조하시기 바랍니다

는 [W]가 사용자 정의 기능 ithin 로컬 함수 범위 http://php.net/manual/en/language.variables.scope.php 도입된다. 함수 내에서 사용되는 변수는 기본적으로 이며 로컬 범위는 입니다.

PHP에서는 PHP에서 많은 다른 언어와 달리 외부 범위가 함수 내에서 사용할 수 없습니다. 전역 범위에서 변수를 가져 오려면 변수를 인수로 전달하거나 (권장 솔루션) gloabal 키워드를 사용해야합니다. 당신은 함수 내에서 fncGrabNemsis를 호출 http://php.net/manual/en/language.variables.scope.php

2

:

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

이것은 당신은 더 나은 이해하는 데 도움이해야합니다

1

함수 안에 $local을 사용하고있는 것을 확인한 후에는 global $local을 사용하여 함수 범위 내에서 전역 범위 $local 변수를 참조해야합니다.

관련 문제