如何在$ result的原始值上运行的while循环中为$ result分配一个新值?

时间:2017-11-14 11:15:39

标签: php mysql sql

这里我打印一个表,其中包含从数据库中提取的一些数据。但是当我试图执行时,错误" mysqli_fetch_assoc()要求参数1为mysqli_result,第51行的C:\ xampp \ htdocs \ select33.php中给出布尔值 "

我想用一个按钮填充第一列,第二列,第三列,第四列包含数据库数据。第五列应填写计算。计算是为了获得今天的日期和获取的记录" bday"(出生日期)之间的差异,以月为单位。 这是代码。

<?php  
//select33.php  
$output = '';  
$connect = mysqli_connect("localhost", "root", "", "calendar");  
if(isset($_POST["action"]))  
{  
  $procedure = "  
  CREATE PROCEDURE selectMembers()  
  BEGIN  
  SELECT * FROM club_member ORDER BY CIRP_ID DESC;  
  END;  
  ";  
  if(mysqli_query($connect, "DROP PROCEDURE IF EXISTS selectMembers"))  
  {  
       if(mysqli_query($connect, $procedure))  
       {  
            $query = "CALL selectMembers()";  
            $result = mysqli_query($connect, $query);  
            $output .= '  
                 <table class="table table-bordered">  
                      <tr>  
                           <th></th>
                           <th width="30%">ID</th>  
                           <th width="30%">First Name</th>
                           <th width="30%">Last Name</th>                                                                   

                      </tr>  
            ';  
            if(mysqli_num_rows($result) > 0)  
            {  
                 while($row = mysqli_fetch_array($result))  
                 {  



                      $output .= '  
                           <tr> 
                                <td><button type="button" name="delete" id="'.$row["CIRP_ID"].'" class="delete btn btn-danger btn-xs">Remove</button></td> 
                                <td>'.$row["CIRP_ID"].'</td>                                    
                                <td>'.$row["firstname"].'</td>
                                <td>'.$row["lastname"].'</td>';

                      $tempresult = $result;
                      $temprow = $row;

                      $now = time();
                      $timequery = "SELECT bday FROM club_member WHERE CIRP_ID='".$row["CIRP_ID"]."'";
                      $result = mysqli_query($connect, $timequery);


                      $row = mysqli_fetch_assoc($result); //This is the Line 51
                      $then = strtotime($row["bday"]);
                      $difference = ($now - $then);
                      $months = floor($difference / (60*60*24*30) );            

                      $output .= '                    

                      <td>'.$months.'</td>  


                           </tr>  
                      ';
                      $result = $tempresult;
                      $row = $temprow;  
                 }  
            }  
            else  
            {  
                 $output .= '  
                      <tr>  
                           <td colspan="4">Data not Found</td>  
                      </tr>  
                 ';  
            }  
            $output .= '</table>';  
            echo $output;  
       }  
  }  
}  
?> 

我尝试在while循环中为 $ result 的原始值分配 $ result,$ row 的新值$行的。我认为导致此错误的原因是什么。但我不知道如何进行计算并填充该特定记录的表格单元格。如果你能以任何其他方式告诉我,那将是很棒的。请帮忙:&#39;)

PS:第51行在代码部分显示为注释。

1 个答案:

答案 0 :(得分:0)

您可能有一些查询错误。

尝试这样的事情:

<?php
    //select33.php

    function do_query($connection, $query)
    {
        $result=mysqli_query($connection,$query);
        if ($result===false)
        {
            echo('Query error:<br>');
            echo('Query: '.$query.'<br><br>');
            echo('Error: '.mysqli_error($connection));
            die();
        }
        return $result;
    }

    $output = '';
    $connect = mysqli_connect("localhost", "root", "", "calendar");
    if(isset($_POST["action"]))
    {
        $procedure = "
  CREATE PROCEDURE selectMembers()
  BEGIN
  SELECT * FROM club_member ORDER BY CIRP_ID DESC;
  END;
  ";
        if(do_query($connect, "DROP PROCEDURE IF EXISTS selectMembers"))
        {
            if(do_query($connect, $procedure))
            {
                $query = "CALL selectMembers()";
                $result = do_query($connect, $query);
                $output .= '
                 <table class="table table-bordered">
                      <tr>
                           <th></th>
                           <th width="30%">ID</th>
                           <th width="30%">First Name</th>
                           <th width="30%">Last Name</th>

                      </tr>
            ';
                if(mysqli_num_rows($result) > 0)
                {
                    while($row = mysqli_fetch_array($result))
                    {

                        $output .= '
                           <tr>
                                <td><button type="button" name="delete" id="'.$row["CIRP_ID"].'" class="delete btn btn-danger btn-xs">Remove</button></td>
                                <td>'.$row["CIRP_ID"].'</td>
                                <td>'.$row["firstname"].'</td>
                                <td>'.$row["lastname"].'</td>';

                        $now = time();
                        $timequery = "SELECT bday FROM club_member WHERE CIRP_ID='".$row["CIRP_ID"]."'";
                        $result_inner = do_query($connect, $timequery);


                        $row_inner = mysqli_fetch_assoc($result_inner); //This is the Line 51
                        $then = strtotime($row_inner["bday"]);
                        $difference = ($now - $then);
                        $months = floor($difference / (60*60*24*30) );

                        $output .= '

                      <td>'.$months.'</td>


                           </tr>
                      ';
                    }
                }
                else
                {
                    $output .= '
                      <tr>
                           <td colspan="4">Data not Found</td>
                      </tr>
                 ';
                }
                $output .= '</table>';
                echo $output;
            }
        }
    }

当然这不是你的问题的完整解决方案,你仍然必须找到什么是mysql错误以及如何解决它。

另外,考虑MVC(简而言之,保持PHP,SQL和HTML分离)。这有助于保持代码清洁并使调试更容易。

[编辑] 我已经更新了我的代码。

正如您所看到的,我已经创建了函数,它取代了mysqli_query的所有用法,因此它将显示任何sql错误。

此外,您不应该对多个查询使用相同的变量。 Insted,您可以创建新变量,例如$ row_inner和$ result_inner。那些主要不是好名字,因为它没有说什么&#34;这是什么&#34;,但那是另一回事。