Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Запрос в базу данных PDO где многомерный массив ? - PHP БД

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Rassol2
Отправлено: 30 Июля, 2015 - 10:14:39
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Май 2014  


Помог: 0 раз(а)




Выполняю запрос в бд, где лежит много записей.
PHP:
скопировать код в буфер обмена
  1. $stmt = $dbh->prepare("SELECT voice_title, voice_user_id FROM voice_content");
  2.     $stmt->execute();
  3.     $voice_content = $stmt->fetch(PDO::FETCH_ASSOC);

А в массив $voice_content попадает только первая запись.
Я предполагал что будет многомерный массив.
что то вроде:
PHP:
скопировать код в буфер обмена
  1. Arrey
  2.        (
  3.          [0]=>Arrey(
  4.                            [voice_title] => 'Пам пам'
  5.                            [voice_user_id] => '41'
  6.                            )
  7.    
  8.          [1]=>Arrey(
  9.                            [voice_title] => 'ЛАМ ЛЯМ'
  10.                            [voice_user_id] => '42'
  11.                           )
  12.         )

А а получаю только
PHP:
скопировать код в буфер обмена
  1.                    Arrey(
  2.                            [voice_title] => 'Пам пам'
  3.                            [voice_user_id] => '41'
  4.                            )

Сильно не бейте ногами, я сам пытаюсь пописывать на PHP, смотрел статьи по пдо, так там возвращает так как нужно.
Что у меня не так то ?
 
 Top
Мелкий Супермодератор
Отправлено: 30 Июля, 2015 - 10:32:06
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




http://php.net/manual/en/pdostatement.fetch.php
Цитата:
PDOStatement::fetch — Fetches the next row from a result set

С чего вы взяли, что будет много строк? Одна за вызов и будет.


-----
PostgreSQL DBA
 
 Top
Rassol2
Отправлено: 30 Июля, 2015 - 11:08:55
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Май 2014  


Помог: 0 раз(а)




как же тогда реализуется вывод статей опросов ?

В базе данных есть 10 опросов.
Есть файл который отвечает за отработку voice.php
Он содержит запрос в базу данных
PHP:
скопировать код в буфер обмена
  1. $stmt = $dbh->prepare("SELECT voice_title, voice_user_id FROM voice_content");
  2.     $stmt->execute();
  3.     $voice_content = $stmt->fetch(PDO::FETCH_ASSOC);


Так же есть файл который отвечает за представление voice.html
В котором мы крутим в цикле массив и делаем строки с опросами.
CODE (html):
скопировать код в буфер обмена
  1. <div>
  2.         <div class="target">
  3.                 <div class="list bordered">
  4.                         <div class="gray-l dotted item item_profile">
  5.                                 <a href="#" class="blue item__text"><?=$voice_content['voice_title']?></a>
  6.                         </div>
  7.                 </div>
  8.         </div>
  9. </div>


как тогда нужно это делать ?
Если бы получили многомерный массив тогда можно было бы в voice.html дописать форыч, и пробежатся по элементам.
Подскажите как это правильно делают, а то я не представляю теперь.
 
 Top
DelphinPRO
Отправлено: 30 Июля, 2015 - 11:46:00
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




Rassol2 вы по ссылке проходили, которую Мелкий дал?
Там справа есть список всех методов. Потрудитесь ознакомиться.
Плюс посмотрите примеры в документации. И такие простые вопросы отпадут сами собой.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Rassol2
Отправлено: 30 Июля, 2015 - 15:31:43
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Май 2014  


Помог: 0 раз(а)




[quote=DelphinPRO][/quote]
читал, после того как прочел и написал этот пост.
Мне не понятно как сделать то что я опиал.

Получается нужно делать в файле voice.php запрос в базу, затем прокрутить его в цыкле while и внутри этого цикла составить двумерный массив который потом прокрутить в цикле на странице voice.html ?

Вот это мне никак не понятно.
 
 Top
exlant
Отправлено: 30 Июля, 2015 - 15:48:39
Post Id



Посетитель


Покинул форум
Сообщений всего: 425
Дата рег-ции: Февр. 2015  


Помог: 14 раз(а)




в цикле нужно крутить только метод fetch...
вот пример из документации, на которую вам дали ссылку:

PHP:
скопировать код в буфер обмена
  1. while ($row = $stmt->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_NEXT)) {
  2.       $data = $row[0] . "\t" . $row[1] . "\t" . $row[2] . "\n";
  3.       print $data;
  4.     }


можно еще воспользоваться методом:
fetchAll() - Возвращает массив, содержащий все строки результирующего набора
, что также указано в документации, вы уверены что читали ее????
 
 Top
DelphinPRO
Отправлено: 30 Июля, 2015 - 16:08:07
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




Rassol2 пишет:
читал

Ну да, конечно...

http://php.net/manual/ru/pdostat...ent.fetchall.php


Rassol2 пишет:
Получается нужно делать в файле voice.php запрос в базу, затем прокрутить его в цыкле while и внутри этого цикла составить двумерный массив который потом прокрутить в цикле на странице voice.html ?

Вот это мне никак не понятно.


Можно и так. А что вас смущает?


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Мелкий Супермодератор
Отправлено: 30 Июля, 2015 - 16:14:17
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




И о чём надо просто знать, как читать документацию: pdo давно реализует Traversable.
Значит, можно напрямую итерировать объект результата:

Стиль возвращаемого значения зависит от настройки коннекта PDO::ATTR_DEFAULT_FETCH_MODE и настройки запроса PDOStatement::setFetchMode


-----
PostgreSQL DBA
 
 Top
Rassol2
Отправлено: 30 Июля, 2015 - 22:10:35
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Май 2014  


Помог: 0 раз(а)




[quote=Мелкий][/quote]

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

Спасибо буду пробовать делать.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB