0

データベースにある経費テーブルから 3 つの引数を返そうとしています。これはusers.phpにある私の関数です

public function expense($username, $i) {
    $query = $this->db->prepare("SELECT * FROM `expenses` WHERE `username`= ?");
    $query->bindValue(1, $username);
    $i=1;
    $totalSpent=0;

    try{

        $query->execute();
        foreach ($query as $row) {
                    print "Username: " .  $row['username'] .", Amount: ". $row['amount'] ."$, Type: ". $row['type'] .", Date: ". $row['date'] .", Comment: ". $row['comment']   . ".<br>";
                    $totalSpent+=$row['amount'];
                    $i++;
                }

        return $query->fetch();
        return $i;
        return $totalSpent;

    } catch(PDOException $e){

        die($e->getMessage());
    }

}

次のようにユーザー名に一致する列を取得するように、view.php ファイルに設定しました。

        <?php
    $users->expense($username);
    ?>

私の問題は、関数に 1 つの引数 ( $username) を送信していることですが、関数に従って、$i(実際には行数) と $totalSpent合計行数を取得したいことです。

行の表示は正常に機能しますが、複数の方法で試しましたが、変数$i$totalSpent変数を取得できませんでした。

私はこれでかなり新しいので、間違ったことをした場合は、コードを改善する方法についての提案を楽しみにしています。

4

1 に答える 1

0

関数呼び出しから返すことができる項目は 1 つだけなので、その項目を配列またはオブジェクトにします。

return array(
    'results' => $query->fetch(),
    'i' => $i,
    'totalSpent' => $totalSpent
);

次を使用してアクセスします。

$returnValues = $users->expense($username);
$userQueryResult = $returnValues['results'];

ただし、クラスを使用しているため、それらの値でパブリック クラス プロパティを設定し、メソッドの外部からオブジェクト プロパティにアクセスすることもできます。

public function expense($username, $i) {
    $query = $this->db->prepare("SELECT * FROM `expenses` WHERE `username`= ?");
    $query->bindValue(1, $username);
    $i=1;
    $totalSpent=0;

    try{

        $query->execute();
        foreach ($query as $row) {
                    print "Username: " .  $row['username'] .", Amount: ". $row['amount'] ."$, Type: ". $row['type'] .", Date: ". $row['date'] .", Comment: ". $row['comment']   . ".<br>";
                    $totalSpent+=$row['amount'];
                    $i++;
                }

        $this->queryResult = $query->fetch();
        $this->i = $i;
        $this->totalSpent = $totalSpent;

    } catch(PDOException $e){

        die($e->getMessage());
    }

}

を使用してアクセスする

$users->expense($username);
$userQueryResult = $users->queryResult;

この後者はよりクリーンなアプローチになります

于 2013-11-04T13:29:56.200 に答える