PDO - 在“while”循环中获取 Assoc

twe*_*tok 1 php mysql pdo

我试图在 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,但它没有给我任何东西。

ner*_*ist 6

因此,假设唯一见过的元素是最后一个元素,这是因为您返回的内容在每个循环中都被覆盖。有几个选项可以解决这个问题。最简单的是:

$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)