这里我打印一个表,其中包含从数据库中提取的一些数据。但是当我试图执行时,错误" 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行在代码部分显示为注释。
答案 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;,但那是另一回事。