2013-08-01 80 views
0

我是PHP OOP的新手。返回來自類的多個結果而不是回聲?

我想中檢索從數據庫中的所有結果,而不是用echo方法,但RETURN裏面(因爲我經常聽到的方法不應該附和什麼,但只回報),因爲我做如下所示:

class MySqlDb { 

    public $conn; 
    public $numRows; 

    function __construct($host, $un, $p, $db) { 
     $this->conn = new mysqli($host, $un, $p, $db); 
    } 

    function get_smth() { 
     // $conn = new mysqli($host, $un, $p, $db); 
     $q = "SELECT * FROM posts"; 
     $r = $this->conn->query($q) or die(mysqli_error()); 
     $this->numRows = $r->num_rows; 
     // return "<p>A total of $this->numRows records were found</p>"; 
     while ($row = $r->fetch_assoc()) { 
      echo $row['title'].'<br>'; 
     } 
    } 

} 

$t = new MySqlDb('localhost', 'root', '', 'oop'); 
$t->get_smth(); 

我想將echo $row['title'].'<br>';更改爲return $row['title'].'<br>';,仍然工作相同(現在如果我使用返回,我只會得到第一個結果)。什麼需要改變?

+0

詢問DB接口,讓您一步到位的所有結果,而無需手動收集他們:'返回$ R-> fetch_all (MYSQLI_ASSOC);'](http://php.net/manual/en/mysqli-result.fetch-all.php)。 – DCoder

回答

0
function get_smth() { 
    // $conn = new mysqli($host, $un, $p, $db); 
    $q = "SELECT * FROM posts"; 
    $r = $this->conn->query($q) or die(mysqli_error()); 
    return $r->fetch_all(); 
} 

然後遍歷結果調用函數時:

foreach ($t->get_smth() as $array){ 
    // do something 
} 
+1

'fetch_assoc'只返回一行。你的例子將遍歷該行的*字段*。 – DCoder

+0

感謝您的更新。將fetch_assoc()更改爲fetch_all(); – Maximus2012

0

只需將所有內容加載到數組中並返回數組。保持輸出格式不在這個類中,並將其留給任何調用這個類的東西。

$return_array = array(); 
while ($row = $r->fetch_assoc()) { 
    $return_array[]['title'] = $row['title']; 
} 
return $return_array; 
+0

好的,但我應該在哪裏循環通過結果?我想用這個來使用方法:echo $ t-> get_smth(); –

+0

'while'循環遍歷結果。 –

1

在PHP(和大多數語言)中,一旦函數達到第一個return語句就停止執行。爲了返回多個事物,必須返回某種數據結構 - 最常見的是數組。

相關問題