したがって、これまでに見られた唯一の要素が最後の要素であると仮定すると、返されるものが各ループで上書きされるためです。これを解決するためのいくつかのオプションがあります。最も単純なものは次のとおりです。
$stmt = $this->conn->prepare('SELECT * FROM books');
$stmt->execute();
$text = "";
while($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
$book_id = $row['id'];
$book_title = $row['title'];
$book_image = $row['image'];
$book_amz = $row['amazon'];
$book_desc = $row['description'];
$book_rating = $row['rating'];
$book_date = $row['date'];
$book_author = $row['author'];
$book_categorie = $row['categorie'];
//String concatenation of text will
//give you one big string at the end to return.
$text .= "ID: '{$book_id}'";
}
return $text;
ただし、これは実際のブートストラップhtmlではうまく機能しません。列が正しく追加されていることを確認する必要があります。
もう少し直感的なものが必要になります
実際のコードを使用すると、
のようになります。$stmt = $this->conn->prepare('SELECT * FROM books');
$stmt->execute();
$bookEcho = array();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
$bookEcho[] = '<div class="col-md-3">
<div class="thumbnail">
<span>' . $book_title . '</span>
<img src="' . $book_image . '">
<div class="book-options">
<span>Bewertung</span><br/>
' . $stars . '
<a href="books.php?id=' . $book_id . '" class="btn btn-read btn-block">Jetzt lesen</a>
</div>
</div>
</div>';
}
return $bookEcho;
これで、関数内で次のようなことができます(これは私がこれまでに書いた中で最もエレガントなことではありませんが、仕事を終わらせる必要があります):
$cols = 4;
$colCount = 1;
foreach ($bookEcho as $book){
if($colCount == 0){//create a row}
echo $book;
$coolCount++;
if($colCount == 0){end a row}
if($colCount == 4){ $colCount = 0;}
}