2013-08-18 43 views
1

我有一個函數,它檢查一個查詢,然後使用一個while循環提取數據,我想返回這個數據,但我仍然希望它增加,但我讀到返回終止一個函數,從而使它無法增加。有沒有解決的辦法?循環中的函數返回

$this->messages = array(); 
while($row = $data) { 
       $this->messages[$i]['id'] = $row['id']; 
       $this->messages[$i]['title'] = $row['title']; 
       $this->messages[$i]['message'] = $row['message']; 
       $i++; 

這個循環的功能,我想繼續下去,直到循環完成,但裏面我就不能返回任何值..有一個解決此問題?

謝謝

編輯:

<?php 

function Message($username){ 

      $query = "SELECT * FROM msg WHERE `to` = '".$this->userid."' && `to_viewed` = '0' && `to_deleted` = '0' ORDER BY `created` DESC"; 
      $stmt = $this->connection->prepare($query); 
      $stmt->execute(); 

    $data = $stmt->fetch(PDO::FETCH_ASSOC); 
    $num_rows = $stmt->fetchColumn(); 

     if($num_rows) { 
      $i=0; 
      $this->messages = array(); 
      while($row = $data) { 
// want to return these 3 for each result 
       $this->messages[$i]['id'] = $row['id']; 
       $this->messages[$i]['title'] = $row['title']; 
       $this->messages[$i]['message'] = $row['message']; 

       $i++; 
      } 
     } else { 
      return 1; 
     } 
    } 

?> 
+1

完成一個循環後,有很多方法可以返回數據,但您在這裏沒有非常清楚您的目標:您是否可以澄清「我仍然希望它增加」的含義或者給出更多的代碼圍繞你的功能?你想要返回哪些值? – davidf2281

+0

@ davidf2281對不起 – user2693086

+0

@ user2693086可能一個臨時變量有效嗎?將循環中的數據保存在一個新變量中,然後再遞增。 –

回答

4

使用PDO::fetchAll(),它返回所有結果的陣列,而不是在同一時間返回一行:

function Message($username){ 

    $query = "SELECT * FROM msg WHERE `to` = '".$this->userid."' && `to_viewed` = '0' && `to_deleted` = '0' ORDER BY `created` DESC"; 
    $stmt = $this->connection->prepare($query); 
    $stmt->execute(); 
    $this->messages = $stmt->fetchAll(PDO::FETCH_ASSOC); 
    return $this->messages; 
} 

而是教你有關循環(CS 101的概念 - 學習如何編程的人怎麼了?),下面是你自己編碼的方式:

$stmt->execute(); 
    $this->messages = array(); 
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)); 
     $this->messages[] = $row; 
    } 
    return $this->messages; 
+0

建議編輯:'while($ row = $ stmt-> fetch(PDO :: FETCH_ASSOC)){'not'while($ row = $ stmt-> fetch(PDO :: FETCH_ASSOC);' – vee