远离foreach循环中的MySQL查询。 foreach导致while循环问题?

时间:2013-10-06 15:13:54

标签: php mysql arrays loops foreach

我有以下代码:

<?php
//The company_array:

$company_array = array(
    "AAA" => "AAA",
    "BBB" => "BBB",
    "CCC" => "CCC",
    "DDD" => "DDD"
);

$platform_data = 'PC'; //Just to keep it short :)


    foreach ($company_array as $company) {
    if ($stmt = $mysqli->prepare("SELECT price, time FROM $company WHERE platform = ? ORDER BY time ASC")) {
        $stmt->bind_param("s", $platform_data);
        $stmt->execute();
        $stmt->bind_result($price[$company], $time[$company]);
        $i=0;
        while ($stmt->fetch()) {
            $company_info[$company][$i] = array('Price' => $price[$company], 'Time' => $time[$company]);
            $i++;
        }
        $stmt->close();
    }
?>

现在我遇到了一些问题,循环的最后一次迭代似乎打破了,如果我打印$ company_info,但最后一家公司显示正常,最后一个似乎重复所有行的最后一个值:

Array
(
[AAA] => Array
    (
        [0] => Array
            (
                [Price] => 626.8600
                [Time] => 2013-09-27 14:30:06
            )

        [1] => Array
            (
                [Price] => 615.5900
                [Time] => 2013-09-27 15:45:05
            )

        [2] => Array
            (
                [Price] => 604.7400
                [Time] => 2013-09-27 17:45:05
            )
    )

[BBB] => Array
    (
        [0] => Array
            (
                [Price] => 246.7200
                [Time] => 2013-09-27 14:30:06
            )

        [1] => Array
            (
                [Price] => 245.4700
                [Time] => 2013-09-27 15:45:05
            )

        [2] => Array
            (
                [Price] => 244.8300
                [Time] => 2013-09-27 17:45:05
            )

    )

[CCC] => Array
    (
        [0] => Array
            (
                [Price] => 189.0900
                [Time] => 2013-09-27 14:30:06
            )

        [1] => Array
            (
                [Price] => 188.9800
                [Time] => 2013-09-27 15:45:05
            )

        [2] => Array
            (
                [Price] => 188.8900
                [Time] => 2013-09-27 17:45:05
            )

    )

[DDD] => Array
    (
        [0] => Array
            (
                [Price] => 134.3100
                [Time] => 2013-10-06 13:30:06
            )

        [1] => Array
            (
                [Price] => 134.3100
                [Time] => 2013-10-06 13:30:06
            )

        [2] => Array
            (
                [Price] => 134.3100
                [Time] => 2013-10-06 13:30:06
            )
    )
)

正如您所看到的那样,公司AAA,BBB和CCC在每个阵列中都有不同的价格和时间,但公司DDD具有相同的值,重复3次(数据库中的最后一个值),当值不同时与其他公司一样。

现在从我所看到的我做错了,而不是使用foreach我应该在数组上使用implode()并使用它,但它让我困惑,因为我找不到一个很好的例子,它用于FROM字段(似乎只在WHERE上使用)

我的问题是,如何避免使用foreach循环,因为它似乎会导致问题,并在FROM字段中使用正确的implode()方法?

我猜我还需要修改我的while循环,以便输出保持相同的格式。

0 个答案:

没有答案