$events='';
$ps = $pdo->prepare('SELECT description FROM events WHERE evdate = "'.$deets.'"');
$ps->execute();
$status = (bool) $ps->fetchColumn();
if($status>0){
$events .= '<div id="eventControl"><button onMouseDown="overlay()">Close</button><br /><br /><b>' . $deets .'</b><br /><br /></div>';
$ps = $pdo->query('SELECT description FROM events WHERE evdate = "'.$deets.'"');
while($fs=$ps->fetch(PDO::FETCH_BOTH)){
$desc = $fs['description'];
$events .= '<div id="eventBody">' . $desc .'<br /><hr><br /></div>';
}
}
echo $events;
为什么在这段代码中我不得不再次调用$ pdo-&gt;查询$ fs ['description']才能工作,为什么它不让我从第一个查询中重用$ ps,执行时遇到了什么问题做到了吗?谢谢。
答案 0 :(得分:3)
不要使用$ps->fetchColumn()
来判断查询是否返回了任何行。问题是这会提升获取光标,所以你必须倒带才能让你的循环再次以结果的第一行开始。
相反,使用$ps->fetchAll()
,检查这是否为非空,然后循环遍历它。
$ps = $pdo->prepare('SELECT description FROM events WHERE evdate = "'.$deets.'"');
$ps->execute();
if($rows = $ps->fetchAll(PDO::FETCH_ASSOC)) {
$events .= '<div id="eventControl"><button onMouseDown="overlay()">Close</button><br /><br /><b>' . $deets .'</b><br /><br /></div>';
foreach ($rows as $fs){
$desc = $fs['description'];
$events .= '<div class="eventBody">' . $desc .'<br /><hr><br /></div>';
}
}
代码中的另一个问题是您为查询返回的每一行分配了相同的id="eventBody"
。 ID必须是唯一的,因此我将其更改为一个类。