2015-10-21 58 views
0

取(PDO :: FETCH_OBJ)我有一個單獨的文件名爲類職位:遍歷PDO statment使用類

<?php 

class POSTS { 
    //Start of class properties: 
    private $db_connection; 

    public $post_id; 
    public $section_id; 
    public $user_id; 
    public $post_title; 
    public $post_details; 
    public $post_date; 
    public $post_category; 
    public $post_display; 

    public $num_of_rows; 

    public function getRelatedPosts($section_name, $category, $display) { 
     $stm = $this->db_connection->prepare("SELECT * FROM posts WHERE section_name!=:Section_name AND category=:Category AND display=:Display ORDER BY id DESC"); 
     $stm->bindParam(":Section_name", $section_name); 
     $stm->bindParam(":Category", $category); 
     $stm->bindParam(":Display", $display); 
     $stm->execute(); 

     $this->num_of_rows = $stm->rowCount(); 
     if ($this->num_of_rows >= 1) { 
      $post_data = $stm->fetch(PDO::FETCH_OBJ); 

      $this->post_id = $post_data->id; 
      $this->section_id = $post_data->section_id; 
      $this->user_id = $post_data->user_id; 
      $this->post_title = $post_data->title; 
      $this->post_details = $post_data->details; 
      $this->post_date = $post_data->date; 
      $this->post_category = $post_data->category; 
      $this->post_display = $post_data->display; 

     } 
    } 

} 

?> 

然後,我經歷的結果我的索引文件要循環

    $section_name = 'PHP'; 

        $display = 'yes'; 

        $POSTS->getRelatedPosts($section_name, $category $display); 
        $num_of_rows = $POSTS->num_of_rows; 

        if ($num_of_rows >= 1) { 
         for ($m=1; $m<=$num_of_rows; $m++) { 

          $post_id = $POSTS->post_id; 
          $section_id = $POSTS->section_id; 
          $user_id = $POSTS->user_id; 

          $post_title = $POSTS->post_title; 
          $post_details = $POSTS->post_details; 
          $post_date = $POSTS->post_date; 

         ?> 
         <div id="related_post"> 
          <h4><a href=""><?php echo $post_title;?></a></h4> 
          <p><?php echo $post_details;?></p> 
         </div> 
         <?php 
         } 
        } else { 
         echo 'Sorry no related posts now!'; 
        } 

不幸的是,結果只有一個重複的記錄,與$ num_of_rows變量的值相等。 我嘗試了一些不同的獲取方法,例如: fetchAll()和其他樣式,但總是導致錯誤或只重複一條記錄。

有人幫我用我的代碼請。

+2

可能不是問題,但隨着PHP手冊,'rowCount時()中指出'因爲你在'$ STM-> rowCount時()'在'SELECT'語句中可能不準確。你會想要做一個'COUNT()'來代替。 *(Example#2:http://php.net/manual/en/pdostatement.rowcount.php)* – Rasclatt

+0

另外,你有'getRelatedPosts()'方法,但是你在腳本中使用'getSectionPosts()'? 'getRelatedPosts()'發生了什麼? – Rasclatt

+0

在這個例子中,rowCount()函數對我很好,謝謝你的建議。 –

回答

0

如果你想循環,嘗試在你的方法循環:

public function getRelatedPosts($section_name, $category, $display) 
{ 
    $stm = $this->db_connection->prepare("SELECT * FROM posts WHERE section_name!=:Section_name AND category=:Category AND display=:Display ORDER BY id DESC"); 
    $stm->bindParam(":Section_name", $section_name); 
    $stm->bindParam(":Category", $category); 
    $stm->bindParam(":Display", $display); 
    $stm->execute(); 

    $this->num_of_rows = $stm->rowCount(); 
    if ($this->num_of_rows >= 1) { 
     while($post_data = $stm->fetch(PDO::FETCH_OBJ)) { 
      $this->post_id[] = $post_data->id; 
      $this->section_id[] = $post_data->section_id; 
      $this->user_id[] = $post_data->user_id; 
      $this->post_title[] = $post_data->title; 
      $this->post_details[] = $post_data->details; 
      $this->post_date[] = $post_data->date; 
      $this->post_category[] = $post_data->category; 
      $this->post_display[] = $post_data->display; 
     } 
    } 
} 

你的循環可能會是這樣的:

for ($m=1; $m<=$num_of_rows; $m++) { 
    $post_id = $POSTS->post_id[$m]; 
    $section_id = $POSTS->section_id[$m]; 
    $user_id = $POSTS->user_id[$m]; 
    $post_title = $POSTS->post_title[$m]; 
    $post_details = $POSTS->post_details[$m]; 
    $post_date = $POSTS->post_date[$m]; 
?> 
    <div id="related_post"> 
     <h4><a href=""><?php echo $post_title;?></a></h4> 
     <p><?php echo $post_details;?></p> 
    </div> 
<?php 
    } 
+0

我已經嘗試過,但不能正常工作...... –

+0

我剛剛添加了'for'循環的樣子,你嘗試過嗎? – Rasclatt

+0

並且這不會在索引文件中重複我的(div), –

0

在我的班級我應該使用,而不是當前的下面一個:

$results = $stm->fetchAll(PDO::FETCH_OBJ); 

我不會得到我目前的類屬性的任何優勢。 在我指數文件,我將通過$results循環使用foreach循環,如下所示:

foreach($results as $post){ 
    $post_title = $post->title; 
    $post_details = $post->details; 
} 

等等...

0

我與PDO試驗和我有同樣的問題與PDO :: FETCH_OBJ

我使用PHP 5.6 XAMPP 30年6月5日

不用說, - 數據庫名是動物 - 它有三列只有:animal_id,animal_type,animal_name

下面的測試代碼工作正常,輸出的所有記錄(在我的測試數據庫都只有十一)

$stmt = $dbh->prepare("SELECT * FROM animals"); 
$stmt->execute(); 

if($stmt->rowCount() > 0) { 
    while($obj = $stmt->fetch(PDO::FETCH_OBJ)) { 
     echo $obj->animal_type . " " . $obj->animal_name . "<br>"; 
    } 
} 

也許你可以插入計數器在循環內,或者甚至更好地使查詢正確地限制範圍。

不管怎麼說,上面的代碼,如預期的產出何種後續

kookaburra bruce 
emu bruce 
goanna bruce 
dingo bruce 
kangaroo bruce 
wallaby bruce 
wombat bruce 
koala bruce 
kiwi cambiato 
pippo zollo 
pippz zoll2