База данных PHP Недопустимый аргумент для foreach ()

Привет, я очень новичок в PHP, потому что я только начал изучать это 2 дня назад! Я пытаюсь отобразить свою вторую таблицу должным образом в моем файле index.html, но я получаю эту ошибку: Недопустимый аргумент, предоставленный foreach () Взгляните введите описание изображения здесь

Любая помощь приветствуется

Класс

public class Category { public int Id{get;set;} public string Name {get;set;} } public class Product{ public int Id{get;set;} public int CategoryId{get;set;} public String Brand {get;set;} public String Name {get;set;} public decimal Price{get;set; } 

index.php

 <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <link href="css/bootstrap.min.css" rel="stylesheet"> <script src="js/bootstrap.min.js"></script> </head> <body> <div class="container"> <div class="row"> <h3>PHP CRUD Grid</h3> </div> <div class="row"> <p> <a href="create.php" class="btn btn-success">Create</a> </p> <table class="table table-striped table-bordered"> <thead> <tr> <th>Id</th> <th>CategoryId</th> <th>Brand</th> <th>Name</th> <th>Barcode</th> <th>Price</th> </tr> </thead> <tbody> <?php include_once 'database.php'; $pdo = Database::connect(); $sql = 'SELECT * FROM product ORDER BY id DESC'; foreach ($pdo->query($sql) as $row) { echo '<tr>'; echo '<td>'. $row['id'] . '</td>'; echo '<td>'. $row['category_id'] . '</td>'; echo '<td>'. $row['brand'] . '</td>'; echo '<td>'. $row['name'] . '</td>'; echo '<td>'. $row['barcode'] . '</td>'; echo '<td>'. $row['price'] . '</td>'; echo '<td width=250>'; echo '<a class="btn" href="read.php?id='.$row['id'].'">Read</a>'; echo '&nbsp;'; echo '<a class="btn btn-success" href="update.php?id='.$row['id'].'">Update</a>'; echo '&nbsp;'; echo '<a class="btn btn-danger" href="delete.php?id='.$row['id'].'">Delete</a>'; echo '</td>'; echo '</tr>'; } ?> </tbody> </table> <div class="container"> <div class="row"> <h3>PHP CRUD Grid</h3> </div> <div class="row"> <p> <a href="createCategory.php" class="btn btn-success">Create</a> </p> <table class="table table-striped table-bordered"> <thead> <tr> <th>CategoryId</th> <th>Category Name</th> </tr> </thead> include_once 'database.php'; <?php $sql2 = 'SELECT * FROM category ORDER BY id DESC'; foreach ($pdo->query($sql2) as $row) { echo '<tr>'; echo '<td>'. $row['id'] . '</td>'; echo '<td>'. $row['category_name'] . '</td>'; echo '<td width=250>'; echo '<a class="btn" href="readCategory.php?id='.$row['id'].'">Read</a>'; echo '&nbsp;'; echo '<a class="btn btn-success" href="updateCategory.php?id='.$row['id'].'">Update</a>'; echo '&nbsp;'; echo '<a class="btn btn-danger" href="deleteCategory.php?id='.$row['id'].'">Delete</a>'; echo '</td>'; echo '</tr>'; } Database::disconnect(); ?> </tbody> </table> </div> </div> </body> </html> 

Удалите второе:

 include 'database.php'; 

или использовать:

 include_once 'database.php'; 

для предотвращения двойной загрузки вашего файла базы данных.

Возможно, вы захотите рассмотреть вопрос об отключении и подключении снова

У вас есть 6- th элемент в заголовке и 7 td элементов в ваших строках. Попробуйте добавить th в строку заголовка.

Это означает, что SQL-запрос не работает (PDO возвращает false, если запрос не работает). В manpage говорится:

Если вы не извлечете все данные в результирующем наборе до того, как вы выполните следующий вызов PDO :: query (), ваш вызов может завершиться неудачно. Вызовите PDOStatement :: closeCursor (), чтобы освободить ресурсы базы данных, связанные с объектом PDOStatement, перед тем как отправить следующий вызов PDO :: query ().

Изменить: не похоже, что это проблема – попробуйте добавить

 echo '<pre>'.print_r($pdo->errorInfo(), true).'</pre>'; 

после этого для каждого цикла это должно выводить детали ошибки PDO.