2013-06-25 4 views
5

PHP 5.3 (XAMPP 1.7.3, windows 7)에서 제대로 작동하지만 내 서버에서 작동하지 않는 클래스가 있습니다 (PHP 5.2.17 - 안전 모드 에서) : PHP 함수가 값을 반환하지 않습니다.

<?php 

    class MYSQL_DB { 

     var $connection; 

     function MYSQL_DB() { 
      $this->connection = mysql_connect(S, U, P) or die('Can\'t connect to MySQL server.'); 
      mysql_select_db(DB, $this->connection) or die(mysql_error()); 
     } 

     function getJobs($wid) { 
      $q = "SELECT * FROM " . TB_PREFIX . "joblist where owner = {$wid} order by ID ASC"; 
      $result = mysql_query($q, $this->connection); 
      $ret = $this->mysql_fetch_all($result); 
      mysql_free_result($result); 
      return $ret; 
     } 

     function mysql_fetch_all($result) { 
      $all = array(); 
      if ($result) { 
       while ($row = mysql_fetch_assoc($result)) { 
        $all[] = $row; 
       } 
       return $all; 
      } 
     } 

    } 
    $db=new MYSQL_DB(); 

?> 

그리고 다른 파일에

, 나는 getjobs 기능 사용 :

<?php 
    $tempbJobs=$db->getJobs(1368); 
    var_dump($tempbJobs); 
?> 

내가 바로 getjobs 기능에 return $ret; 전에 var_dump을 사용, 그것은 나를 올바른 값을 보여줍니다하지만 var_dump($tempbJobs);NULL을 인쇄하십시오.

P.S : 코드를 단순화했습니다. 로컬 호스트에서는 작동하지만 프로덕션 서버에서는 작동하지 않습니다.
PS : 나는 return $ret;return 'DUMPED';에 반환 값이 될 것이다 변경하는 경우 string(6) "DUMPED"

var_dump($ret); 출력 : 당신은 단지 기능 mysql_fetch_all ($ 결과) $ 경우에서 $ 모든 반환 사실을 바탕으로

array(2) { 
    [0]=> 
    array(5) { 
    ["id"]=> 
    string(5) "10755" 
    ["owner"]=> 
    string(5) "23626" 
    ["field"]=> 
    string(1) "6" 
    ["type"]=> 
    string(1) "2" 
    ["expi"]=> 
    string(10) "1372144648" 
    } 
    [1]=> 
    array(5) { 
    ["id"]=> 
    string(5) "10756" 
    ["owner"]=> 
    string(5) "23626" 
    ["field"]=> 
    string(1) "5" 
    ["type"]=> 
    string(1) "2" 
    ["expi"]=> 
    string(10) "1372144654" 
    } 
} 
+0

프로덕션 서버에 데이터가 있습니까? – DevZer0

+0

@ DevZer0 네, 있습니다. 내가 말한대로 :'getjobs' 함수에서'return $ ret;'의 바로 전에'var_dump'를 사용하면 정확한 값을 보여줍니다. – undone

+0

@FDL 감사하지만 그 사실을 알고 있습니다. – undone

답변

1

result is true 나는 mysql_query()가 false를 리턴한다고 가정해야한다. 호출 후

$result = mysql_query($q, $this->connection); 

당신이

$result = mysql_query($q, $this->connection); 
if (! $result) { 
    echo "ErrorNo: " . mysql_errno() . " Error Message: " . mysql_error(); 
} 

이 그것이 어떤 종류의 데이터베이스 오류로이 같은 문제가 실제로 무엇인지 식별하는 데 도움이 될 추가 할 수 있습니다.

+0

고마워요.하지만 제가 말한대로'$ ret'에'var_dump'를 사용했는데 괜찮 았습니다! 유일한 문제는 반환 된 값이 없습니다! – undone

+0

네 ...하지만 제가 말한 것을 읽는다면, NO VALUE를 얻는 유일한 방법은 쿼리의 실행 즉, mysql_query()가 에러를 반환하는 것입니다. mysql_fetch_all의 테스트는 return 문을 결코 실행하지 않을 것이다 .... 그래서 return을 수행하지 않는 함수에 대해서는 NULL을 기본값으로 반환 할 것이다; .... 그리고 당신은 NULL 또는 귀하의 tems 값을 얻을 것이다. 따라서 QUERY에는 오류가 있습니다. 솔직하게 말해서 매개 변수 $ wid 즉 {$ wid} 주위에 중괄호가 필요한 이유를 알 수 없습니다. – RiggsFolly

+0

동의 함 - 빈 배열을 반환하려고 함 -'return $ all'을 괄호'}'로 이동하십시오. – Voitcus

1

S, U, P, TB_PREFIXdefined()이고 값이 있는지 확인할 수 있습니까?

또한 어쨌든 응답을 반환하는 함수 mysql_fetch_all을 수정

function mysql_fetch_all($result) { 
    $all = array(); 
    if ($result) { 
     while ($row = mysql_fetch_assoc($result)) { 
      $all[] = $row; 
     } 
    } 
    return $all; 
} 
1

나는 모든 의견을 검토했다. 당신의 의견 중 하나에서 당신은 반환이 작동하지 않는다고 말했지만 나는 그것이 올바르게 결과를 return $ret 전에 결과를 출력 할 때 당신의 의견 중 하나에서 이미 말했기 때문에 그것이 올바르게 작동하고 있다고 생각합니다.

사실 :mysql_fetch_all($result) 또한 결과를 반환합니다.

체크 아웃 SQL 코드 : $q = "SELECT * FROM " . TB_PREFIX . "joblist where owner = {$wid} order by ID ASC"; {$ wid} 무엇인지 모르겠습니다.

시험이

$q = "SELECT * FROM " . TB_PREFIX . "joblist where owner = '$wid' order by ID ASC"; 
1

시도() 함수 getjobs에 $의 RET에 대한 배열을 정의한 후

$ret=array(); //try 
0

나는이 조금 녹슨 질문 아직 여전히 흥미로운 알고있다. 그것에 대한 해결책을 찾을 수 있습니까?

다른 서버에서 동일한 코드가 작동하지 않으면이 경우 메모리 제한이 의심됩니다. PHP 메모리 제한을 늘려보십시오.

그리고 phpinfo()를 확인하는 것이 좋습니다. 두 서버에서 차이점을 비교합니다.

+0

나는 이것을 포기했다! 당신이 볼 수 있듯이, 수용된 대답은 없습니다! – undone