2

いくつかのパブリック関数とプライベート関数を持つクラス Club{} があります。私が持っている 3 つのプライベート関数は、データベースからデータを取得するために使用されます。次のコードは次のとおりです。

private function Get_Members_From_DB()
    {
        $sql = "SELECT
                    Email, FirstName, LastName, Gender
                FROM
                    member";

        $result = mysqli_query($this->Con, $sql);

        $arrayResult = array();

        while($row = mysqli_fetch_array($result))
        {
            $arrayResult[] = $row;
        }

        return ($arrayResult);
    }

    private function Get_Members_Interests_From_DB($MemberEmail)
    {
        $sql = "SELECT 
                    interest_type.InterestDescription
                FROM
                    member, member_interests, interest_type
                WHERE
                    member.Email = '$MemberEmail'
                AND
                    member.Email = member_interests.Email
                AND
                    member_interests.InterestID = interest_type.InterestID";

        $result = mysqli_query($this->Con, $sql);

        while($row = mysqli_fetch_array($result))
        {
            $arrayResult[] = $row;
        }

        return ($arrayResult);
    }

    private function Get_Interests_Types_From_DB()
    {
        $sql = "SELECT 
                    InterestID,
                    InterestDescription
                FROM
                    interest_type";

        $result = mysqli_query($this->Con, $sql);

        while($row = mysqli_fetch_array($result))
        {
            $arrayResult[] = $row;
        }

        return ($arrayResult);
    }

これらを呼び出すと、mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given406 行目で警告が表示されwhile($row = mysqli_fetch_array($result))ます。Fatal error: Cannot use object of type Club as array in私は48番線にも乗ります。echo("<tr><td>" . $row1['FirstName'] . " " . $row1['LastName'] . "</td><td>" . $row1['Email'] .

これのいくつかのバージョンを試しましたが、データを次の関数で機能させることができないようです:

public function DisplayMembers()
    {   
        //$members[] = array();
        $interests[] = array();
        $members = new Club();
        $members->Get_Members_From_DB();

        echo ("<table id='membertable'><tr><td colspan='4'>Informatics Club Members</td></tr>
                <tr><td width='130px'>Name</td><td width='170px'>Email</td><td width='60'>Gender</td>
                <td width='280px'>Interests</td></tr>");

        while($row1 = $members)
        {
            echo("<tr><td>" . $row1['FirstName'] . " " . $row1['LastName'] . "</td><td>" . $row1['Email'] . 
                    "</td><td>" . $row1['Gender'] . "</td><td><ul>;");

            $results2 = new Club;
            $results2->Get_Members_Interests_From_DB($row1['Email']);

            while($row2 = mysqli_fetch_array($results2))
            {
                $interests[] = $row2;
                echo("<li>" . $row2['InterestDescription'] . "</li>");
            }

            echo("</ul></td></tr>");
        };

        echo "</table><br>";
}

私は次のように変更private function Get_Members_From_DB()しました:

$sql = "SELECT
                    Email, FirstName, LastName, Gender
                FROM
                    member";

        $result = mysqli_query($this->Con, $sql); return ($result);

そして、上記の最初のエラーを取得せずに関数で機能しませんが、DisplayMembers()46行目にあることを除いて、次のように変更されます:while($row1 = mysqli_fetch_array($members)) 上記のコードを取得して直接貼り付けるとDisplayMembers()、関数を取得できますHTML テーブルとして正しく表示されます。コードをプライベート関数に分割するとエラーが発生する理由がわかりません。何か案は?

編集:私は、同じクラス内のパブリック関数からこれらのプライベート関数を呼び出しています。

4

3 に答える 3

5

コードをセクションごとに分析するのに役立ちます。前半はこんな感じ…

$members = new Club();
$members->Get_Members_From_DB();

Get_Members_From_DB()値を返しますが、この値をどこにも保存しません。さらに、すでに Club クラスに参加しているため、新しい Club は必要ありません。代わりにこれを試してください...

$members = $this->Get_Members_From_DB();

次は...

while($row1 = $members)

しかし、ここに割り当て (コピー)$membersしているだけ$row1です。そして、真実である限り、$membersこれは永遠にループします。代わりに、これを検討してください...

foreach ($members as $member)
{
    // Do something with $member
}

最後に、興味のある結果を取得する際にも同様の問題があります。あなたのコードは...

$results2 = new Club;
$results2->Get_Members_Interests_From_DB($row1['Email']);

while($row2 = mysqli_fetch_array($results2))
{
    $interests[] = $row2;
    echo("<li>" . $row2['InterestDescription'] . "</li>");
}

繰り返しGet_Members_Interests_From_DB()ますが、何かを返していますが、値を保存していません。代わりにこれはどうですか...

$interests = $this->Get_Members_Interests_From_DB($member['Email']);
foreach ($interests as $interest)
{
    echo '<li>', $interest['InterestDescription'], '</li>';
}
于 2013-05-01T15:32:53.997 に答える