2013-06-25 50 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); 
?> 

私はreturn $ret;getjobsで関数の前var_dump権利を使用する場合、それは私の正しい値を示したが、var_dump($tempbJobs);意志NULLを印刷します。

P.S:コードを簡略化しました。ローカルホストでは動作しますが、運用サーバーでは動作しません。
PS:$場合にのみ機能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

:私はreturn 'DUMPED';return $ret;を変更した場合、値はstring(6) "DUMPED"

var_dump($ret);出力となり返却結果は真です。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を取得するか、あなたのテンションには値なしです。したがって、質問には誤りがあります。正直言って、なぜパラメータ$ 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

私はすべてのあなたのコメントを検討。 あなたのコメントの1つでは、返品は機能していないと言いましたが、あなたがすでにreturn $retの前に結果をプリントアウトすると正しい結果が得られたというあなたのコメントの1つでは既に言いました。

実際: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