【问题标题】:while loop repeated last row in array from mysql tablewhile循环重复了mysql表中数组的最后一行
【发布时间】:2018-12-15 22:18:22
【问题描述】:

我想从我的 mysql 表中获取与我的查询匹配的所有行 截至目前,我有两行匹配查询我将每一行保存在 $tourData 变量,而不是在 while 循环中添加到 $allTourData 变量中。

这个函数在我的$allTourData 中返回两个数组,但是我得到了第一行和第二行两次。

这是我的代码。

public static function getTourAvailabilityStatus($date, $route)
{
    $lt   = MySQL::connect();
    $tour = $lt->prepare
    (   /** @lang MySQL */
        "
            SELECT id, token, route, date, travels_name, bus_number, st, aj, wt, sl
            FROM tour
            WHERE date = ? AND route = ? ;
            "
        );

    MySQL::error($tour, $lt);
    $tour->bind_param('ss', $date, $route);
    MySQL::error($tour, $lt);
    $tour->execute();
    MySQL::error($tour, $lt);
    $tourData = [];
    $tour->bind_result(
        $tourData['id'], $tourData['token'], $tourData['route'], $tourData['date'], $tourData['travelsName'],
        $tourData['BusNumber'], $tourData['st'], $tourData['aj'], $tourData['wt'], $tourData['sl']
    );
    MySQL::error($tour, $lt);
    $allTourData = [];
    while($tour->fetch())
    {
        $allTourData[] = $tourData;
    }
    MySQL::error($tour, $lt);
    $tour->close();

    return $allTourData;
}

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    这应该可以解决问题:

    public static function getTourAvailabilityStatus($date, $route)
    {
        $lt   = MySQL::connect();
        $tour = $lt->prepare
        (   /** @lang MySQL */
            "
                SELECT id, token, route, date, travels_name, bus_number, st, aj, wt, sl
                FROM tour
                WHERE date = ? AND route = ? ;
                "
            );
    
        MySQL::error($tour, $lt);
        $tour->bind_param('ss', $date, $route);
        MySQL::error($tour, $lt);
        $tour->execute();
        MySQL::error($tour, $lt);
    
        $tour->bind_result(
            $id, $token, $route, $date, $travelsName,$BusNumber, $st, $aj, $wt, $sl
        );
        MySQL::error($tour, $lt);
        $allTourData = [];
        while($tour->fetch())
        {
            $allTourData[] = [ $id, $token, $route, $date, $travelsName,$BusNumber, $st, $aj, $wt, $sl];
        }
        MySQL::error($tour, $lt);
        $tour->close();
    
        return $allTourData;
    }
    

    【讨论】:

    • 我已经厌倦了这个,但这会将我预先分配的 $tourData 变量更改为 1,其中我有我的行数据。
    • 是的,这很有魅力,在花了 2 个小时之后,我知道当您需要多行表格时,永远不会在数组中分配 bind_result 参数:)
    猜你喜欢
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    • 2018-04-01
    • 2013-01-30
    • 1970-01-01
    • 2013-12-20
    • 2017-04-25
    • 2011-06-17
    相关资源
    最近更新 更多