我试图在 while 循环内回显一些 html。我正在使用PDO和 PDO_ASSOC 获取我的东西。
这就是我所拥有的:
$stmt = $this->conn->prepare('SELECT * FROM books');
$stmt->execute();
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'];
$text = "ID: ' . $book_id . '";
}
return $text;
Run Code Online (Sandbox Code Playgroud)
但它只给了我桌子的一行。我什至尝试过fetchAll,但它没有给我任何东西。
因此,假设唯一见过的元素是最后一个元素,这是因为您返回的内容在每个循环中都被覆盖。有几个选项可以解决这个问题。最简单的是:
$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;
Run Code Online (Sandbox Code Playgroud)
然而,这不适用于您真正的引导 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;
Run Code Online (Sandbox Code Playgroud)
现在在你的函数中,无论它是什么,你都可以做类似的事情(这不是我写过的最优雅的东西,但应该完成工作):
$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;}
}
Run Code Online (Sandbox Code Playgroud)