1 Востаннє редагувалося Пам'ять не може бути READ (22.12.2012 19:24:03)

Тема: Не можу зрозуміти чому не працює запит до БД.

Привіт.
Вирішив написати у навчальних цілях скрипт виводу категорій і субкатегорій необмеженої вкладеності.
Ніби все просто, але...
Одним словом, щось не так з запитом до mysql або з само функцією(хоча коли забрати запит і поставити щось інше то все працює)
При запуску скрипта, виводить тільки головні категорії, а субкатегорії нехоче.
Сам скрипт:
P.S: за форматування коду та назви змінних не судіть, оскільки код писав на скору руку.

<html>
<head>
<meta charset="utf8"/>
</head>
<body>
<?php
ini_set('display_errors',1);
 $db = new mysqli('localhost','root','','testDB') or die(mysql_errno());
 $db->query("SET NAMES utf8");
 $primeCategory = $db->query("SELECT * FROM category WHERE home_category = 0");
 
  function subCategory($idCategory)
  {
  $subCat = $db->query("SELECT * FROM category WHERE home_category = ".$idCategory."");
  
  if($subCat->num_rows == 0)
   return 0;
   
   
  for($i2 = 0; $i2 < $subCat->num_rows; $i2++)
  {
   $str1 = $subCat->fetch_object();
   echo $str1->name.'<br>'; 
  }
 
  //echo subCategory($idCategory+1);
  }
 
 for($i = 0; $i < $primeCategory->num_rows; $i++)
 {
 $str = $primeCategory->fetch_object();
 echo $str->name.'<br>'; 
 echo subCategory($str->id);
 }
 
?> 
</body>
</html> 

SQL:

CREATE TABLE IF NOT EXISTS `category` (
  `id` int(3) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `description` varchar(255) NOT NULL,
  `home_category` int(2) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

--
-- Дамп даних таблиці `category`
--

INSERT INTO `category` (`id`, `name`, `description`, `home_category`) VALUES
(1, 'Програмування', 'Збірка сайтів і блогів які присв`ячені програмуванню', 0),
(2, 'PHP', 'Для php програмістів', 1),
(3, 'Фреймворки', 'Фреймворки', 2);

2

Re: Не можу зрозуміти чому не працює запит до БД.

Перше що я помітив на око це зайве echo. У вас всередині у функції викликається echo для кожної підкатегорії, а перед викликом subCategory також echo не повертає назви категорій!

3 Востаннє редагувалося Пам'ять не може бути READ (22.12.2012 19:17:54)

Re: Не можу зрозуміти чому не працює запит до БД.

У функції замість

echo $str1->name.'<br>';

поставив

$catText = $catText.$str1->name.'<br>';

і у піся циклу поставив

return $catText;

,але всеодно не допомогло.

Re: Не можу зрозуміти чому не працює запит до БД.

Забравши функцію(просто прописавши сам код) скрипт працює, але як тільки запихаю код для субкатегорій у функцію, перестає працювати.

5 Востаннє редагувалося Пам'ять не може бути READ (22.12.2012 19:21:07)

Re: Не можу зрозуміти чому не працює запит до БД.

Прояснилася ще одна помилка.

 Fatal error: Call to a member function query() on a non-object in index.php on line 14

тобто матюкається на сам запит

  $resCat = $db->query("SELECT name FROM category WHERE home_category = $idCategory");

6

Re: Не можу зрозуміти чому не працює запит до БД.

Hanter написав:

Прояснилася ще одна помилка.

 Fatal error: Call to a member function query() on a non-object in index.php on line 14

тобто матюкається на сам запит

  $resCat = $db->query("SELECT name FROM category WHERE home_category = $idCategory");

)) Ну тепер ясно, у вас всередині функції не видно зовнішнього об'єкту $db.

Re: Не можу зрозуміти чому не працює запит до БД.

Patron написав:

)) Ну тепер ясно, у вас всередині функції не видно зовнішнього об'єкту $db.

Зараз буде нубське питання.
Як зробити, щоб було видно ?

8

Re: Не можу зрозуміти чому не працює запит до БД.

ололо
subCategory($str->id, $db);

Re: Не можу зрозуміти чому не працює запит до БД.

miroslav.chandler написав:

ололо
subCategory($str->id, $db);

Дякую.

10

Re: Не можу зрозуміти чому не працює запит до БД.

Якщо вам потрібно вивести всі категорії на сторінці тоді через 1н скл запит. Просто зробіть ордер по home_category ;)
А про область видимості обов'язково почитайте ;)

11

Re: Не можу зрозуміти чому не працює запит до БД.

Поки побачив тему, вже все відповіли)