php
  • pdo
  • 2013-07-21 53 views -1 likes 
    -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->查詢$ FS [「說明」]的工作,爲什麼didn`t讓我重用$ PS從第一個查詢中,執行是否與它有關?謝謝。重用與PDO查詢的結果

    +1

    你試過重複使用嗎?你得到了什麼結果? –

    +0

    只是一個空數組 – Mihai

    +1

    爲什麼你使用字符串插值而不是綁定參數? – Gordon

    回答

    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必須是唯一的,所以我將它改爲一個類。

    +1

    說到問題,您還應該提到在構建不帶綁定參數的SQL查詢以及將非轉義內容嵌入HTML中時存在潛在的安全漏洞。 – DCoder

    +0

    謝謝,由於聲譽要求,無法升級。 – Mihai

    +0

    你的提問者,你不需要upvote,只是接受答案。 – Barmar

    相關問題