5

PHP 5.3 (XAMPP 1.7.3、Windows 7) で正常に動作するクラスがありますが、サーバーでは動作しません (php 5.2.17 - セーフ モードオン):

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

var_dump 関数で直前return $ret;に使用するとgetjobs、正しい値が表示されますが、NULLvar_dump($tempbJobs);が出力 されます。

PS: コードを簡略化しました。ローカルホストでは機能しますが、運用サーバーでは機能しません。
PS: に変更return $ret; するとreturn 'DUMPED';、戻り値は次のようになります。string(6) "DUMPED"

var_dump($ret ); 出力:

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"
  }
}
4

5 に答える 5

1

関数 getjobs() で $ret の配列を定義してから試してください

$ret=array(); //try 
于 2013-07-03T11:29:15.330 に答える
1

$result が true の場合、関数 mysql_fetch_all($result) からのみ $all を返すという事実に基づいて、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();
}

これは、何らかのデータベース エラーである必要があるため、実際の問題を特定するのに役立つ場合があります。

于 2013-06-27T12:46:55.957 に答える
1

S, U, P, TB_PREFIX定数があり、値があることを確認できますかdefined()

mysql_fetch_allとにかく応答を返すように関数を変更します。

function mysql_fetch_all($result) {
    $all = array();
    if ($result) {
        while ($row = mysql_fetch_assoc($result)) {
            $all[] = $row;
        }
    }
    return $all;
}
于 2013-07-01T07:33:15.787 に答える
0

これは少しさびた質問ですが、それでも興味深いものです。その上で解決策を見つけることができますか?

同じコードが別のサーバーで機能しない場合、その場合はメモリ制限が疑われます。PHP のメモリ制限を増やしてみてください。

そして、phpinfo(); をチェックするのが賢明かもしれません。両方のサーバーで違いを比較します。

于 2015-04-14T02:00:34.477 に答える