使用Kohana中的数组,空白页?

时间:2011-03-05 22:53:18

标签: php mysql arrays kohana kohana-3

tl; dr - 推送数组($ array []或$ array [$ id]在Kohana 3中不起作用,它会显示一个空白页。

我正在使用Kohana(3),这是我第一次体验MVC,到目前为止一直很棒;但是,我正在使用一个数据库,遇到一个奇怪的问题,我希望有人能说清楚:

我的工作流程是这样的,让您了解我遇到的问题:

$sql = "SELECT table1.row1, max(table2.row1) as `maxAwesome` FROM table1, table2 WHERE table1.id=table2.table1id GROUP BY table1.id";
$table1Results = DB::query(Database::SELECT, $sql)->execute();
$masterArray = array();
foreach ($table1Results as $result1)
{
     $sql = "SELECT * FROM table2 WHERE table2id='"  . $result1['id'] . "' AND column > 21";
     $table2Results = DB::query(Database::SELECT, $sql)->execute();
     $subArray = array();
     foreach ($table2Results as $result2)
     {
         $subArray[$result1['id']] = $result2;
         // Even had just $subArray[] = array("whatever");
     }
     $masterArray[] = array("table1Data" => array(), "table2Data"=> $subArray);
}

我做了一个查询,我运行了几个最大/最小函数,然后在foreach中做一个查询,做另一个选择,以我想要的方式构建一个数据的主数组,所有SQL等工作正常和花花公子;但是,当我推动阵列时会出现问题。

似乎每当我通过执行$ array [] = array(“data”)来推送数组时;或者通过指定键$ array [$ id] = array(“data”); Kohana给了我一个直空白页,没有错误,没有输出等。

有时我会得到一个Kohana错误,表明该密钥不存在(呃,我正在创建它),但是大多数情况下输出都是直白色。

为什么会这样?我错了吗?

提前致谢。


清晰度编辑:

除了我的SQL失误之外,问题在于构建辅助数组,例如:

    $queryStores = "SELECT stores.store_id, stores.title, max(product.discount) as `max_discount`, min(product.discount) as `min_discount`
                    FROM stores, products
                    WHERE products.store=stores.store_id
                    GROUP BY products.store";

    $stores = DB::Query(Database::SELECT, $queryStores)->execute();
    $formattedStores = array();
    if (count($stores))
    {
        foreach ($stores as $store)
        {
            $formattedStores[$store['store_id']] = array(
                "title" => $store['title'],
            );
            // Same result if just doing $formattedStores[] = array();
            // Problem goes away should I do:
            // $formattedStores = array("This works");
            //
        }
    }

    echo "<pre>";
    print_r($formattedStores);
    echo "</pre>";

那不打印数组,它只是给出一个空白页;但是,如果我改变它只是重新设置$ formattedStores数组,我得到一个输出。什么是推动导致问题的数组,也许是Kohana错误?

由于

2 个答案:

答案 0 :(得分:0)

您的代码应该是: -

$sql = "SELECT table1.id, table1.row1, max(table2.row1) as `maxAwesome`
        FROM table1, table2
        WHERE table1.id = table2.table1id
        GROUP BY table1.id";
$table1Results = DB::query(Database::SELECT, $sql)->execute();
$masterArray = array();

if (count($table1Results))
{
    foreach ($table1Results as $result1)
    {
        $sqlInner = "SELECT * FROM table2
                     WHERE table2id = '" . $result1['id'] . "'
                       AND column > 21";
        $table2Results = DB::query(Database::SELECT, $sqlInner)->execute();
        $subArray = array();

        if (count($table2Results))
        {
            foreach ($table2Results as $result2)
            {
                $subArray[$result1['id']] = $result2;
                // Even had just $subArray[] = array("whatever");
            }
        }

        $masterArray[] = array("table1Data" => array(), "table2Data"=> $subArray);
    }
}

一些有价值的编码标准&amp;错过: -

  • 您的第一个SQL中缺少“id”字段(w.r.t。“table1”数据库表。)
  • 应该使用另一个变量命名更好地编写第二个SQL,以便将它与第一个SQL分开。因此,第二个变量被命名为“$sqlInner”。
  • 检查数组变量中是否存在数组元素总是更好,所以我使用了“if”语句进行了简单的检查。

希望它有所帮助。

答案 1 :(得分:0)

我已经确定这与记忆​​有关。