-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;

なぜこのコードで $fs['description'] を機能させるために $pdo->query を再度呼び出さなければならなかったのですか?なぜ最初のクエリから $ps を再利用できなかったのですか?ありがとうございました。

4

1 に答える 1

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 は一意でなければならないので、クラスに変更しました。

于 2013-07-21T08:56:22.390 に答える