Из БД не могу извлечь данные нормально

Тема в разделе "PHP", создана пользователем phillip, 21 апр 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. phillip

    phillip

    Регистр.:
    4 сен 2007
    Сообщения:
    413
    Симпатии:
    15
    Проблема в кодировке или в чем хз. Есть у меня в БД таблица categories с полями id, name, runame. В ней записаны допустим строки
    1 auto Автомобили
    2 women Женчины
    3 computers Компутеры

    Пробую доставать это дело из базы и отображать с помощью echo- нифига не получается, он мне показывает каждый раз просто единицы какие-то. либо вопрос. Вывожу из бд таким образом:
    Код:
    <?php
    function GetAllCategories(){
    	$link = Connect2DB();
    	$query = "SELECT * FROM `categories`";
    	$result = @mysql_query($query,$link) or die(mysql_error()."<br />\n".$query);
    	$categories = mysql_fetch_assoc($result);
    	@mysql_close($categories);
    	return $categories;
    
    $categories = GetAllCategories();
    foreach($categories as $category){
    	echo	$category['name']."||".$category['runame']."<br>";
    	
    	  }
    }
    ?>
    Результат выполнения этого кода:
    Код:
    1||1
    l||l
    �||�
    В чем может быть дело? я запарился уже- не работает :(
     
  2. MadWizard

    MadWizard Постоялец

    Регистр.:
    24 мар 2009
    Сообщения:
    145
    Симпатии:
    20
    Это хитрая рекурсия или ошибка?

    По идее, должно быть так:
    Код:
    <?php
    function GetAllCategories(){
    	$link = Connect2DB();
    	$query = "SELECT * FROM `categories`";
    	$result = @mysql_query($query,$link) or die(mysql_error()."<br />\n".$query);
    	$categories = mysql_fetch_assoc($result);
    	@mysql_close($categories);
    	return $categories;
    }
    
    $categories = GetAllCategories();
    foreach($categories as $category){
    	echo	$category['name']."||".$category['runame']."<br>";
    
    	  }
    ?>
     
  3. NoN

    NoN Постоялец

    Регистр.:
    25 ноя 2008
    Сообщения:
    79
    Симпатии:
    33
    1. код который скинл не рабочий, так как функцию вызываеш саму себя. после return скобку надо закрыть
    2. в такой функции будет возвашатся только 1 запись а не все.
    3, используй акую конструкцию

    Код:
    $query = "SELECT * FROM my_table";
    $result = mysql_query($query) or die("Query failed : " . mysql_error());
    while ($line = mysql_fetch_assoc($result)) 
    {
    echo line["id"];
    }
    

    или же собрать массив с данными и передать его на вывод, но лучше сразу выводить


    Код:
    <?php
    function GetAllCategories(){
    	$link = Connect2DB();
    	$query = "SELECT * FROM `categories`";
    	$result = @mysql_query($query,$link) or die(mysql_error()."<br />\n".$query);
    	//$categories = mysql_fetch_assoc($result);
    	while($categories = mysql_fetch_assoc($result))
    	{
    	$categories2[]=$categories;
    	}
    	@mysql_close($categories);
    	return $categories2;
    }
    
    $categories = GetAllCategories();
    foreach($categories as $category){
    	echo	$category['name']."||".$category['runame']."<br>";
    
    	  }
    ?>
    
    
    
     
    phillip нравится это.
  4. serjinio

    serjinio

    Регистр.:
    10 май 2007
    Сообщения:
    439
    Симпатии:
    49
    Уберите функцию и запустите в процедуре ..увидите где вылезет ошибка.
     
  5. Serg1k

    Serg1k Прохожие

    Подобные проблемы решаются дебаггингом.
     
  6. [Гилыч]

    [Гилыч] Постоялец

    Регистр.:
    5 авг 2008
    Сообщения:
    57
    Симпатии:
    17
    во-первых убрать рекурсию,
    во-вторых, скажите в какой кодировке данные у БД,
    в-третьих, в какой кодировке вывод....
     
  7. ref.

    ref. Создатель

    Регистр.:
    17 окт 2008
    Сообщения:
    10
    Симпатии:
    1
    А нафига так усложнять все ?

    Вот попробуйте мой код, если такая-же бурда вылезет, значит ошибка в кодировках. Тогда по другому сделаем =)

    Код:
    <?php
      $link = Connect2DB();
      $query = 'SELECT * FROM categories';
      $result = @mysql_query($query, $link) or die(mysql_error() . '<br />\n' . $query);
    
      while ($row = mysql_fetch_array($result) {
        echo $row['name'] . '||' . $row['runame'] . '<br />';
      }
    ?>
     
Статус темы:
Закрыта.