<?php
$sql="SELECT * FROM categories WHERE parent = 0";
$pquery = $db->query($sql);
?>
<!-- Top NavBar -->
<nav class="navbar navbar-default navbar-fixed-top">
<div class="container">
<a href="index.php" class="navbar-brand">Boutique</a>
<ul class="nav navbar-nav">
<?php while($parent = mysqli_fetch_assoc($pquery)) :?>
<?php
$parent_id = $parent['id'];
$sql2 = "SELECT * FORM categories WHERE parent = '$parent_id'";
$cquery = $db->query($sql2);
?>
<!-- Menu Items -->
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<?php echo $parent['category']; ?>
<span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
<?php while($child = mysqli_fetch_assoc($cquery)) : ?>
<li><a href="#"><?php echo $child['category'] ;?></a></li>
<?php endwhile; ?>
</ul>
</li>
<?php endwhile; ?>
</ul>
</div>
</nav>
В этом коде выполняется только первая часть, относящаяся к родителям 0, а другая, относящаяся к подкатегориям, не работает, и от следующей ошибки:
Предупреждение: mysqli_fetch_assoc() ожидает, что параметр 1 будет mysqli_result, boolean задан в C:\xampp\htdocs\e\includes\navigation.php в строке 24
Как я могу это решить? Это результат
Запрос возвращается вместо boolean в результирующем наборе. Это может быть вызвано возвратом пустого набора данных. Есть вероятность ошибки SQL. Вы можете выполнить echo mysqli_error() после $ pquery и $ cquery, чтобы проверить, была ли ошибка при выполнении запроса.
Вы использовали FORM вместо изменения FROM
"SELECT * FORM категории WHERE parent = '$ parent_id'"
в
"SELECT * FROM категорий WHERE parent = '$ parent_id'"
FORM
на FROM
и ваш запрос должен работать как положено.
1/Вы используете PDO ($db-> query()), и вы не должны смешивать mysqli и PDO, вместо этого используйте $db-> fetch.
2/У вас есть ошибка sql FROM
not FORM
<?php
$sql="SELECT * FROM categories WHERE parent = 0";
$pquery = $db->query($sql);
?>
<!-- Top NavBar -->
<nav class="navbar navbar-default navbar-fixed-top">
<div class="container">
<a href="index.php" class="navbar-brand">Boutique</a>
<ul class="nav navbar-nav">
<?php while($parent = $pquery->fetch(PDO::FETCH_ASSOC)) :?>
<?php
$parent_id = $parent['id'];
$sql2 = "SELECT * FROM categories WHERE parent = '$parent_id'";
$cquery = $db->query($sql2);
?>
<!-- Menu Items -->
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<?php echo $parent['category']; ?>
<span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
<?php while($child = $cquery->fetch(PDO::FETCH_ASSOC)) : ?>
<li><a href="#"><?php echo $child['category'] ;?></a></li>
<?php endwhile; ?>
</ul>
</li>
<?php endwhile; ?>
</ul>
</div>
</nav>
$db->query()
) и процедурный ( $parent = mysqli_fetch_assoc($pquery));
) стиль. Это совершенно верно, но я бы рекомендовал придерживаться одного стиля, а не смешивать два.
parent
столбец буквенно-цифровой, а не INT? Если нет, удалите одинарные кавычки вокругWHERE parent = '$parent_id'
.