Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO-稍后获取Assoc_Php_Mysql_Pdo - Fatal编程技术网

Php PDO-稍后获取Assoc

Php PDO-稍后获取Assoc,php,mysql,pdo,Php,Mysql,Pdo,我试图在while循环中回显一点html。 我在PDO和PDO协会拿我的东西 这就是我所拥有的: $stmt = $this->conn->prepare('SELECT * FROM books'); $stmt->execute(); while($row = $stmt->fetch(PDO::FETCH_ASSOC)) { $book_id = $row['id'];

我试图在while循环中回显一点html。 我在PDO和PDO协会拿我的东西

这就是我所拥有的:

        $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;
但它只给了我一排桌子。我甚至试过fetchAll,但它什么也没给我。

为什么不使用foreach呢

$books = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($books as $book){
    $book_id = $book['id'];
    $book_title = $book['title'];
    // ...
}
为什么不使用foreach呢

$books = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($books as $book){
    $book_id = $book['id'];
    $book_title = $book['title'];
    // ...
}

问题是您正在覆盖while循环中的值。对数据库中的每个条目执行一次循环,但只返回最后一个。相反,您希望使用数组:

$stmt = $this->conn->prepare('SELECT * FROM books');
$stmt->execute();
$books = [];
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'];
    $book['text'] = "ID: ' . {$book['id']} . '"; // << Not sure if this is what you actually want. If not, adjust accordingly.

    // Append the above values to the $books array
    $books[] = $book;
}
return $books;
$stmt=$this->conn->prepare('SELECT*fromsbooks');
$stmt->execute();
$books=[];
而($row=$stmt->fetch(PDO::fetch\U 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'];

$book['text']=“ID:'.{$book['ID']}.'”;//问题是您正在覆盖while循环中的值。循环对数据库中的每个条目执行一次,但只返回最后一个。您希望改为使用数组:

$stmt = $this->conn->prepare('SELECT * FROM books');
$stmt->execute();
$books = [];
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'];
    $book['text'] = "ID: ' . {$book['id']} . '"; // << Not sure if this is what you actually want. If not, adjust accordingly.

    // Append the above values to the $books array
    $books[] = $book;
}
return $books;
$stmt=$this->conn->prepare('SELECT*fromsbooks');
$stmt->execute();
$books=[];
而($row=$stmt->fetch(PDO::fetch\U 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'];

$book['text']=“ID:'.{$book['ID']}.'”;//因此假设所看到的唯一元素是最后一个元素,这是因为每个循环都会覆盖返回的内容。有几个选项可以解决此问题。最简单的是:

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

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

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


可能是循环的第一次迭代后由于最后的语法错误导致代码失败。请检查您的错误日志。此
$text='ID:'.$book\u ID.;
可能是
$text='ID:'.$book\u ID;
。不确定这是问题所在,但似乎是一个很好的猜测。抱歉,这只是一个键入错误。不要将其包含在我的代码。这仍然不正确。
$text=“ID:”.$book\u ID.“;
应该是
$text=“ID:”.“$book\u ID.”;
$text=“ID:”{$book\u ID}”
这是我实际代码中的内容:可能是循环的第一次迭代后由于最后的语法错误导致代码失败。请检查错误日志。这
$text='ID:'。$book_ID.;
应该是
$text='ID:'。$book_ID;
。不确定这是问题所在,但似乎是一个很好的猜测y、 这只是一个键入错误。在我的代码中没有它。这仍然是不正确的
$text=“ID:”。“
应该是
$text=“ID:”。“$book\u ID。”;
$text=“ID:”{$book\u ID}”;
这就是我在实际代码中所做的:也尝试过了,也只给了我一行。是的,我有两个条目。谢谢,这是一个没有解决问题的结构更改:在不使用它们的情况下重复地踩踏相同的变量。抱歉。我的意图是提供一个解决方案。虽然这是一个不同的控制结构,但我的我的目标是提供一些帮助。我也试过了,也只给了我一行。是的,我有两个条目。谢谢,这是一个没有解决问题的结构更改:在不使用它们的情况下重复地踩踏相同的变量。抱歉。我的意图是提供一个解决方案。虽然这是一个不同的控制结构,但我的目标是提供一些帮助。感谢您的回答。非常感谢。但它只给了我“数组”。我删除了{},因为它会给我一个错误(意外的{),如果您尝试回显数组,这将不起作用。您将需要使用其中一个。此外,它似乎不是PHP语法错误(请参阅)。我不确定您以后使用此字符串的目的,但可能这就是导致错误的原因。谢谢您的回答。非常感谢。但它只提供了“数组”。我删除了{},因为它给了我一个错误(意外{)如果您试图回显数组,这将不起作用。您需要使用其中一个。此外,这似乎不是PHP语法错误(请参阅)。我不确定您以后使用此字符串的目的是什么,但可能这就是导致错误的原因。我可以想象,但您在使用它的布局时会遇到一些问题。字符串比数组更难解析。尽管我会延迟查看详细信息,直到您回到启动此操作的函数中。目前我没有任何布局问题。我会接受这个,然后看看如果我有更多的条目会发生什么。谢谢,我会这么想,但是你在使用它的布局时会遇到一些问题。字符串比数组更难解析。虽然我会延迟查看详细信息,直到你回到启动此功能的函数中。现在我没有任何布局问题。我会我拿着这个然后看看如果我有更多的条目会发生什么谢谢