PHP генерирует категорию и подкатегорию из базы данных [дубликаты]

0

<?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

Как я могу это решить? Это результат

  • 0
    Какая строка в приведенном выше коде соответствует строке 24, упомянутой в сообщении об ошибке? Кроме того, ваш parent столбец буквенно-цифровой, а не INT? Если нет, удалите одинарные кавычки вокруг WHERE parent = '$parent_id' .
  • 0
    <? php while ($ child = mysqli_fetch_assoc ($ cquery)):?>
Показать ещё 3 комментария
Теги:
mysqli
php-mysqlidb

2 ответа

1
Лучший ответ

Запрос возвращается вместо boolean в результирующем наборе. Это может быть вызвано возвратом пустого набора данных. Есть вероятность ошибки SQL. Вы можете выполнить echo mysqli_error() после $ pquery и $ cquery, чтобы проверить, была ли ошибка при выполнении запроса.

Вы использовали FORM вместо изменения FROM

"SELECT * FORM категории WHERE parent = '$ parent_id'"

в

"SELECT * FROM категорий WHERE parent = '$ parent_id'"

  • 0
    В этом режиме? echo mysqli_error ($ pquery);
  • 0
    У вас просто есть опечатка в приведенном выше коде в строке 15, поменяйте местами FORM на FROM и ваш запрос должен работать как положено.
Показать ещё 1 комментарий
0

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>
  • 2
    Я думаю, что спрашивающий не смешивает PDO и mysqli, он скорее смешивает объектно-ориентированный mysqli ( $db->query() ) и процедурный ( $parent = mysqli_fetch_assoc($pquery)); ) стиль. Это совершенно верно, но я бы рекомендовал придерживаться одного стиля, а не смешивать два.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню