Php 预处理语句中的预处理语句

Php 预处理语句中的预处理语句,php,loops,prepared-statement,Php,Loops,Prepared Statement,我一直在努力把参加某个活动的每个人的身份登记在册。这很有效。 然而,由于某些原因,这不起作用。以前是这样的。我在测试时意识到,当我在while($userRes->fetch())之后放置$userRes->close时,$user=getUser($connection,$id)起作用,但当它在循环之外时就不起作用了。这是我的密码: $userQuery = "SELECT person_id FROM RosterPeopleEvent WHERE news_id=?;"; $userRes

我一直在努力把参加某个活动的每个人的身份登记在册。这很有效。 然而,由于某些原因,这不起作用。以前是这样的。我在测试时意识到,当我在while($userRes->fetch())之后放置$userRes->close时,$user=getUser($connection,$id)起作用,但当它在循环之外时就不起作用了。这是我的密码:

$userQuery = "SELECT person_id FROM RosterPeopleEvent WHERE news_id=?;";
$userRes = $connection->prepare($userQuery);
$userRes->bind_param('i', $eventID);
$userRes->execute();
$userRes->bind_result($id);

while ($userRes->fetch()){
    $user = getUser($connection, $id);
    if ($user == $_SESSION["uid"]){
        $p->addContent("You have volunteered for the BBQ <a href=roster.php?rosterid=1&personid=$id&eventid=$eventID&class=remove rel=external>Remove</a>, ");  
    }
    else{
        $p->addContent("$user has volunteered for the BBQ <a href=roster.php?rosterid=1&personid=$id&eventid=$eventID&class=remove rel=external>Remove</a>, "); 
    }                           
}
$userRes->close();      
$userQuery=“从RosterPeopleEvent中选择人员id,其中新闻id=?;”;
$userRes=$connection->prepare($userQuery);
$userRes->bind_参数('i',$eventID);
$userRes->execute();
$userRes->bind_result($id);
而($userRes->fetch()){
$user=getUser($connection,$id);
如果($user=$\u会话[“uid”]){
$p->addContent(“您自愿参加烧烤,”);
}
否则{
$p->addContent($user自愿参加烧烤,”);
}                           
}
$userRes->close();
固定版本:

$userQuery = "SELECT person_id FROM RosterPeopleEvent WHERE news_id=?;";
$userRes = $connection->prepare($userQuery);
$userRes->bind_param('i', $eventID);
$userRes->execute();
$userRes->bind_result($id);
$userRes->store_result();

while ($userRes->fetch()){
    $user = getUser($connection, $id);
    if ($user == $_SESSION["uid"]){
        $p->addContent("You have volunteered for the BBQ <a href=roster.php?rosterid=1&personid=$id&eventid=$eventID&class=remove rel=external>Remove</a>, ");  
    }
    else{
        $p->addContent("$user has volunteered for the BBQ <a href=roster.php?rosterid=1&personid=$id&eventid=$eventID&class=remove rel=external>Remove</a>, "); 
    }                           
}
$userRes->close();
$userQuery=“从RosterPeopleEvent中选择人员id,其中新闻id=?;”;
$userRes=$connection->prepare($userQuery);
$userRes->bind_参数('i',$eventID);
$userRes->execute();
$userRes->bind_result($id);
$userRes->store_result();
而($userRes->fetch()){
$user=getUser($connection,$id);
如果($user=$\u会话[“uid”]){
$p->addContent(“您自愿参加烧烤,”);
}
否则{
$p->addContent($user自愿参加烧烤,”);
}                           
}
$userRes->close();

首先,删除第一个
中,其中news_id=?;“;
WHERE news_id=?”是的,这只是我的奇怪做法。但这根本不会影响循环的工作方式。我见过PDO出现这种问题。解决方案与关闭光标有关:好了,伙计们,我找到了答案。您需要做的就是:在bind_结果之后,添加$userRes->store_result();你可以走了。