我的php循环循环11次,而不是一次。无法找到错误

时间:2016-01-16 14:29:13

标签: php mysql

这是php代码。函数require,query和render都是给我们的。

<?php

// configuration
require("../includes/config.php"); 

$rows = CS50::query("SELECT `symbol`, `shares`, `cash` FROM `portfolios`, `users` WHERE ?", $_SESSION["id"]);

$positions = [];
foreach ($rows as $row)
{
    $stock = lookup($row["symbol"]);
    $total = ($stock["price"] * $row["shares"]);

    if ($stock !== false)
    {
        $positions[] = [
            "name" => $stock["name"],
            "price" => $stock["price"],
            "shares" => $row["shares"],
            "symbol" => $row["symbol"],
            "total" => $total,
            "cash" => $row["cash"]
        ];
    }
}

// render portfolio
render("portfolio.php", ["positions" => $positions, "title" => "Portfolio"]);

这是我的HTML输出

<div id="middle">
<table class="table table-striped">

<thead>
    <tr>
        <th >Symbol</th>
        <th >Name</th>
        <th >Shares</th>
        <th >Price</th>
        <th >TOTAL</th>
    </tr>
</thead>
<tbody>

    <?php foreach ($positions as $position): ?>
        <tr>
            <td align="left" ><?= $position["symbol"] ?></td>
            <td align="left" ><?= $position["name"] ?></td>
            <td align="left" ><?= $position["shares"] ?></td>
            <td align="left" ><?= number_format($position["price"], 2) ?></td>
            <td align="left" ><?= number_format($position["total"], 2) ?></td>
        </tr>
    <?php endforeach ?>

<tr>
    <td colspan="4" align="left">CASH</td>
    <td align="left"><?= number_format($position["cash"], 2) ?></td>
</tr>

</tbody>

</table>

我的猜测是我的foreach循环有问题。但我不太确定,我的SQL数据库中也可能存在一些错误。

我的mySQL数据库由3行user_idsymbolshares组成。而对于我的user_id,我有3个不同的股票,每个股票都有10股。

任何人都知道可能出现什么问题?

1 个答案:

答案 0 :(得分:1)

如果它运行7次意味着返回7行,则foreach循环正常。问题很可能就在这里:

 $rows = CS50::query("SELECT `symbol`, `shares`, `cash` FROM `portfolios`, `users` WHERE ?", $_SESSION["id"]);

您没有指明哪个列应该与ID相等,因此它可能会返回所有列。需要这样的东西:

$rows = CS50::query("SELECT `symbol`, `shares`, `cash` FROM `portfolios`, `users` WHERE portfolios.user_id = ?", $_SESSION["id"]);