我刚刚创建了一个页面,可以使用他们的学校名称获取2所学校的学生姓名(这仅适用于我的练习)。但是,当我执行以下代码时,我不会得到每个学校名列前茅的顶尖学生的名字,但我得到了其余的名单。
<?php
require 'connect.php';
if(isset($_GET['school']))
{
$school = trim($_GET['school']);
$people = $db->prepare("SELECT id, name FROM users WHERE school = ? ");
$people->bind_param('s', $school);
$people->execute();
$people->bind_result($id, $name);
if(!$people->fetch())
{
echo "Invalid School Name!!";
}
else
{
while($people->fetch())
{
echo 'ID. ',$id, ' ',$name,'<br>';
}
}
}
?>
当我使用if和else语句输出错误消息&#34;无效的学校名称!!&#34;时,才会出现此问题。如果我只是使用while循环来获取数据,我会得到完整的列表。请告诉我为什么我会错过这个名字和解决方案。谢谢。
答案 0 :(得分:2)
您的第一次测试$people->fetch()
。如果答案不是假,那么它再次执行并在循环中执行代码,直到最后一个元素。所以你的if是问题,因为它在测试时传递了第一个元素。
要解决此问题,只需删除if条件:如果查询找不到任何人,
while( $people->fetch() ) {
Do_something(); }
...将被跳过,一切都会按预期工作。
要添加错误消息,请使用try / catch或使用布尔值检查是否进入循环(可能还有其他方法)。
答案 1 :(得分:0)
根据结果更改条件以进行测试
$people->execute();
$people->store_result();
$people->bind_result($id, $name);
if($people->num_rows == 0)
{
echo "Invalid School Name!!";
}
else
{
while($people->fetch())
{
echo 'ID. ',$id, ' ',$name,'<br>';
}
}