【问题标题】:foreach loop in a php functionphp函数中的foreach循环
【发布时间】:2014-05-29 21:03:38
【问题描述】:

我正在尝试创建一个贯穿 Db 表的 foreach 循环,并将其在函数中回显,但是当我尝试执行此操作时,它会获取对象中的行,并回显对象与我有多少行一样多次,并且不会继续到表中的下一个对象。帮助表示赞赏。这是我的代码:

function hotels_from_db() {
include 'DbConnection.php';
$sql = "select * from hotels";

$result = $mysqli->query($sql);

$row = $result->fetch_object();

    foreach ($row as $value) {   
    $foundhotel = "<h1>" . $row->hotel_name . "</h1></br>";
    $foundhotel.= $row->hotel_adress . "</br>";
    $foundhotel.= $row->hotel_postal_code . "</br>";
    $foundhotel.= $row->description;
    echo "$foundhotel";
    }  
  }

也尝试过这样做,但这只会显示表格中的最后一家酒店。

function hotels_from_db() {
include 'DbConnection.php';
$sql = "select * from hotels";

$result = $mysqli->query($sql);

$row = $result->fetch_object();
while($row = $result->fetch_object()){           
    $foundhotel = "<h1>" . $row->hotel_name . "</h1></br>";
    $foundhotel.= $row->hotel_adress . "</br>";
    $foundhotel.= $row->hotel_postal_code . "</br>";
    $foundhotel.= $row->description;
    echo "$foundhotel";
    }  

}

【问题讨论】:

    标签: php function for-loop foreach


    【解决方案1】:

    fetch_object 需要为每一行提取调用。 请尝试以下操作:

    function hotels_from_db() {
        include 'DbConnection.php';
        $sql = "select * from hotels";
    
        if ($result = $mysqli->query($sql)) {
    
            /* fetch object array */
            while ($obj = $result->fetch_object()) {
                $foundhotel = "<h1>" . $obj->hotel_name . "</h1></br>";
                $foundhotel.= $obj->hotel_adress . "</br>";
                $foundhotel.= $obj->hotel_postal_code . "</br>";
                $foundhotel.= $obj->description;
                echo "$foundhotel";        
            }
    
            /* free result set */
            $result->close();
        }
    }
    

    【讨论】:

    【解决方案2】:
    $row = $result->fetch_all(MYSQLI_ASSOC); // MAKE ARRAY ASSOCIATIVE ARRAY
    
    foreach ($row as $value) {   
        $foundhotel = "<h1>" . $value->hotel_name . "</h1></br>";
        $foundhotel.= $value->hotel_adress . "</br>";
        $foundhotel.= $value->hotel_postal_code . "</br>";
        $foundhotel.= $value->description;
        echo "$foundhotel";
    }  
    

    }

    【讨论】:

    • hmm,这会返回一个致命错误:在非对象上调用成员函数 fetch_all(),但我明白你的意思,assoc 应该意味着检查下一个数组对吗?跨度>
    【解决方案3】:

    -&gt;fetch_object 只检索一行

    试试这个:

    function hotels_from_db() {
    include 'DbConnection.php';
    $sql = "select * from hotels";
    $result = $mysqli->query($sql);
    
    while($row = $result->fetch_object()) {   
        $foundhotel = "<h1>" . $row->hotel_name . "</h1></br>";
        $foundhotel.= $row->hotel_adress . "</br>";
        $foundhotel.= $row->hotel_postal_code . "</br>";
        $foundhotel.= $row->description;
        echo "$foundhotel";
    }  
    

    }

    【讨论】:

    • hmm,那么它只显示表格中的最后一个对象,因此所有其他酒店都不会被回显。
    【解决方案4】:

    应该是:

    function hotels_from_db() {
        include 'DbConnection.php';
        $sql = "select * from hotels";
    
        $result = $mysqli->query($sql);
    
        $row = $result->fetch_all();
    
        foreach ($row as $value) {   
            $foundhotel = "<h1>" . $value->hotel_name . "</h1></br>";
            $foundhotel.= $value->hotel_adress . "</br>";
            $foundhotel.= $value->hotel_postal_code . "</br>";
            $foundhotel.= $value->description;
            echo "$foundhotel";
        }  
    }
    

    【讨论】:

    • 感谢您的快速评论,但我已经尝试过了,然后它只会产生一整片空白,并且屏幕上没有任何来自 db 的内容。
    猜你喜欢
    • 2016-09-26
    • 2012-07-19
    • 1970-01-01
    • 2015-08-14
    • 1970-01-01
    • 2021-10-05
    • 2011-06-09
    • 2020-05-17
    • 1970-01-01
    相关资源
    最近更新 更多