php - 两个 while 循环从两个查询中获取数据只显示一个结果

标签 php mysql mysqli

我有这段代码,用于从数据库获取数据:

function show_volanti($data){

    $con = $data;       // PASSO CONNESSIONE
    $id = 1;            // 1 VOLANTE
    $visibile = 1;      // VARIABILE DI VISIBILITA'

    $rows1 = array();   // PREPARO ARRAY 1 PER ID ARTICOLI VOLANTE
    $rows2 = array();   // PREPARO ARRAY 2 PER LE FOTO VOLANTI

    $id_articoli = '';  // RIFERIMENTO ARTICOLI PER SECONDA QUERY GALLERIA
    $g = '';            // RIFERIMENTO ASSOCIAZIONE GALLERY VIEWER
    //$rif_id = '';     // RIF_ID SE OK DA CANCELLARE


    $query1 = "SELECT articoli.id AS id_articoli,
                                      articoli.titolo,
                                      articoli.descrizione
                                      FROM articoli
                                      WHERE articoli.genere1 = ?
                                      AND articoli.visibile = ?";

    $query2 = "SELECT galleria.id AS id_galleria,
                                    galleria.foto,
                                    galleria.rif_id
                                    FROM galleria
                                    WHERE galleria.rif_id = ?";

    $stmt = mysqli_stmt_init($con);     // INIZIALIZZO LA CONNESSIONE

    mysqli_stmt_prepare($stmt,$query1);

    mysqli_stmt_bind_param($stmt,'ii',$id,$visibile);   // LEGO I PARAMETRI

    mysqli_stmt_execute($stmt);     // ESEGUO LA QUERY

    mysqli_stmt_bind_result($stmt,
                            $rows1['id_articoli'],
                            $rows1['titolo'],
                            $rows1['descrizione']);     // CREO RIFERIMENTO PER GALLERIA NEL VIEWER

    $html = "";
    $html .= "<div class='container'>";

    while (mysqli_stmt_fetch($stmt)){

        $id_articoli = $rows1['id_articoli'];


        $html .= "  <div class='row'>";
        $html .= "    <div class='col-sm-12'>";
        $html .= "      <div class='panel panel-default'>";
        $html .= "        <div class='panel-body'>";


        $html .= "            <div class='col'>";
        $html .= "              <div class='panel panel-default'>";
        $html .= "                <div class='panel-heading'><b>$rows1[titolo]</b></div>";
        $html .= "                  <div class='panel-body'>";
        $html .= "                      <div class='row'>";
        $html .= "                          <div class='class_p'>$rows1[descrizione]</div>";
        $html .= "                      <div> <!-- end first row -->";

        $html .= "                      <div class='class_container clearfix'>";


        mysqli_stmt_prepare($stmt,$query2);

        mysqli_stmt_bind_param($stmt,'i',$id_articoli);     // LEGO I PARAMETRI

        mysqli_stmt_execute($stmt);     // ESEGUO LA QUERY

        mysqli_stmt_bind_result($stmt,
                                $rows2['id_galleria'],
                                $rows2['foto'],
                                $rows2['rif_id']);                                  

        while(mysqli_stmt_fetch($stmt)){

            $g = '';
            $g .= "g";
            $g .= $rows2['rif_id'];

            $html .= "<div class='thumbnail col-sm-2'>";
            $html .= "<div class='class_img'>";
            $html .= "<a href='$rows2[foto]' data-toggle='lightbox' data-gallery='$g' >";
            $html .= "<img src='$rows2[foto]' class='img-fluid'>";
            $html .= "</a>";
            $html .= "</div> <!-- end class_img -->";
            $html .= "</div> <!-- end thumbnail col-sm-2- -->"; 
        }

        $html .= "</div> <!-- end class_container -->";

        $html .= "</div> <!-- end panel body -->";
        $html .= "</div> <!-- end panel panel-default -->";
        $html .= "</div> <!-- end col -->";
        $html .= "</div> <!-- end panel-body -->";
        $html .= "</div> <!-- end panel panel-default -->";
        $html .= "</div> <!-- end col-sm-12 -->";
        $html .= "</div> <!-- end row -->";
    }

    mysqli_stmt_close($stmt);   // CHIUDO LO STATEMENT
    mysqli_close($con);         // CHIUDO CONNESSIONE   
    return $html;
}

该代码部分有效,因为它显示了结果,但它只显示了一个结果,并且在数据库中我有更多结果要显示,因此它无法正常工作。您可以帮我找到错误吗?

最佳答案

看来您在外部和内部循环中重复使用相同的变量。例如,您对它们都使用 $stmt。我不确定这是否就是您只得到一个结果的原因(因为这可能取决于您从每个结果中收到的结果数量),但我会对此进行调查。

作为调试技巧,我将删除与外部循环相关的所有代码,并首先正确打印出外部循环的结果。完成该工作后,开始添加内部循环代码并确保其工作。但不要重复使用相同的变量。

关于php - 两个 while 循环从两个查询中获取数据只显示一个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44871292/

相关文章:

php - call_user_func_array() - 警告:mysqli_stmt::bind_param():变量数量与准备好的语句中的参数数量不匹配

php - 如何对 MySQL 条件进行 AND & OR

java - 一起托管 php 和 Java

c++ - 使用共享库的 MySql UDF 不会加载

php - 如果 while 循环返回空,则 ELSE 语句不返回

mysql在select中选择一个值

PHP/MySQL - 使用另一个表中的数据更新 SQL 表

php - 如何从网页中提取有意义有用的内容?

php - 如何在数组中存储 POST 元素

php - 如何在 View / Blade 中显示两个表中的数据