-1
$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->query for $fs['description'] 才能工作,为什么它不允许我重用第一个查询中的 $ps,执行是否与它有关?谢谢你。

4

1 回答 1

3

不要$ps->fetchColumn()用来判断查询是否返回了任何行。问题是这会推进 fetch 游标,因此您必须倒带才能让循环从结果的第一行重新开始。

相反,使用$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 必须是唯一的,所以我将其更改为一个类。

于 2013-07-21T08:56:22.390 回答