使用PDO重用查询结果

时间:2013-07-21 08:29:54

标签: php pdo

$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,执行时遇到了什么问题做到了吗?谢谢。

1 个答案:

答案 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必须是唯一的,因此我将其更改为一个类。