2015-07-04 4 views
0

Я новичок в PHP и не знаком со многими его правилами, так что это может быть глупый вопрос.Предупреждение: mysqli_query(): Не удалось получить mysqli

У меня есть база данных с категориями верхнего уровня и подкатегориями, объединенными в один стол. Я хочу сначала распечатать все категории верхнего уровня, а затем распечатать подкатегории, связанные с этой категорией.

Вот мой код:

<?php 
session_start(); 

include_once "/mysqli_connect.php"; 

$categories0 = mysqli_query($conn, "SELECT * FROM categories WHERE type = 'category'"); 


mysqli_close($conn); 
?> 

<html> 
<head> 
<meta charset="UTF-8" /> 
</head> 
<body> 

<div id="wrap" class="animate"> 

<?php 

while ($categories = mysqli_fetch_array($categories0, MYSQLI_ASSOC)) { 

    $catecory_name = $categories['category']; 
    echo ' 
    <div class="content"> 
    <div class="content_container no_padding"> 
    <div class="content_container header"> 
    <p>'.$categories['category'].'</p> 
    </div> 
    '; 

    $subcategories0 = mysqli_query($conn, "SELECT * FROM categories WHERE type = 'subcategory'"); 

    while ($subcategories = mysqli_fetch_array($subcategories0, MYSQLI_ASSOC)) { 
     echo $subcategories['category']; 
    //mysqli_free_result($subcategories0); 
    } 

    echo ' 
    </div> 
    </div> 
    '; 

} 

?> 

</div> 
</div> 


</body> 
</html> 

Вот скрипт подключения:

<?php 

DEFINE ('DB_USER', '*'); 
DEFINE ('DB_PASSWD', '*'); 
DEFINE ('DB_HOST', '*'); 
DEFINE ('DB_NAME', '*'); 

$conn = mysqli_connect(DB_HOST, DB_USER, DB_PASSWD, DB_NAME); 

if(!$conn){ 
    die('Database connection error'); 
} 

echo '<!-- Connected to database -->' 

?> 

возвращает следующее сообщение об ошибке:

Warning: mysqli_query(): Couldn't fetch mysqli 

Когда оба запроса находятся выше типа документа все это хорошо, но когда второй запрос ниже doctype, возникает ошибка.

Первый запрос всегда работает без проблем, это второй, который возвращает ошибку.

Я не могу понять, что происходит, если кто-то может мне помочь, что будет оценено.

+1

Где код, который открывает соединение с базой данных? –

+0

ПОЧЕМУ вы не удаляете '' из своего кода и попробуйте !! – Saty

+0

@ Хобо Сапиенс да. Первый запрос прошел нормально, это только второй. – Richie378

ответ

2

Вы забудете закрыть цикл while. проверьте комментарий в строке, где вам нужно закрыть его.

<?php 
$categories0 = mysqli_query($conn, "SELECT * FROM categories WHERE type = 'category'"); 
?> 
<!DOCTYPE html> 

<?php 
while ($categories = mysqli_fetch_array($categories0, MYSQLI_ASSOC)) {// need to close your loop 

$catecory_name = $categories['category']; 
echo ' 
<div class="content"> 
<div class="content_container header"> 
<p>'.$categories['category'].'</p> 
</div> 
'; 
}// close here 
$subcategories0 = mysqli_query($conn, "SELECT * FROM categories WHERE type = 'subcategory'"); 
// The above line is where the error occurs 

while ($subcategories = mysqli_fetch_array($subcategories0, MYSQLI_ASSOC)) { 
    echo $subcategories['category']; 

} 


?> 

ОБНОВЛЕНО

Удалить тесную связь с верхней, так как после того, как ваш запрос не будет выполнен. После того, как ваше соединение будет закрыто, ваша переменная соединения исчезнет.

<?php 
session_start(); 

include_once "/mysqli_connect.php"; 

$categories0 = mysqli_query($conn, "SELECT * FROM categories WHERE type = 'category'"); 


?> 
+0

Я пробовал это, но он все равно возвращает ту же ошибку. – Richie378

+0

не могли бы вы разместить весь код? – Saty

+0

@Satay Я отредактировал сообщение, чтобы включить полный скрипт, за исключением некоторых нерелевантных частей HTML. – Richie378

0

Сегодня я поставил эту проблему поэтапно. Но в коде есть небольшая ошибка.

Вы триггером оператор выбора это:

См. Вы закрываете соединение с mysqli_close ($ conn);

, а затем в цикле while вы извлекаете данные. Если соединение было закрыто, то как php может принимать данные из таблицы mysql?

Просто удалите mysqli_close ($ conn); утверждение и запуск.

В последней строке вы можете поместить этот код. После всей операции.

Смежные вопросы