За последние 24 часа нас посетили 17623 программиста и 1591 робот. Сейчас ищут 1562 программиста ...

вопросик по fetchObject()

Тема в разделе "Прочие вопросы по PHP", создана пользователем xfreewindx, 26 ноя 2012.

  1. xfreewindx

    xfreewindx Активный пользователь

    С нами с:
    22 фев 2012
    Сообщения:
    55
    Симпатии:
    0
    Здравствуйте!

    Подскажите пожалуйста не получается применить fetchObject()
    Если пишу так

    Код (Text):
    1.  
    2. public function select($query, $args = []) {
    3. return $this->dbTransaction($query, $args)['stmt']->fetchObject();
    4. }
    возвращает последнюю строчку из БД как объект.
    Но мне нужно все. Пишу так:
    Код (Text):
    1. public function select($query, $args = []) {
    2.         $data = [];
    3.         while ($obj = $this->dbTransaction($query, $args)['stmt']->fetchObject()) {
    4.             $data[] = clone $obj;
    5.         }
    6.         return $data;
    7. }
    Вроде бы все правильно. Скрипт зависает на 30 секунд и вылетает по таймауту. Как правильно это сделать?
     
  2. vladqa

    vladqa Активный пользователь

    С нами с:
    13 янв 2011
    Сообщения:
    27
    Симпатии:
    0
    Возможно:
    Код (Text):
    1.  
    2. $rs = $this->dbTransaction($query, $args)['stmt'];
    3. while ($obj = $rs->fetchObject()) {
    4.             $data[] = clone $obj;
    5.         }
     
  3. xfreewindx

    xfreewindx Активный пользователь

    С нами с:
    22 фев 2012
    Сообщения:
    55
    Симпатии:
    0
    Так работает. Чудеса. Длинное выражение что ли?
    Спасибо.
     
  4. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Не, просто здесь:
    Код (Text):
    1. $rs = $this->dbTransaction($query, $args)['stmt'];
    2. while ($obj = $rs->fetchObject()) {
    3.     $data[] = clone $obj;
    4. }
    сперва выполняется запрос к базе, а потом в цикле обрабатывается его результат. А в твоём примере:
    Код (Text):
    1. while($obj = $this->dbTransaction($query, $args)['stmt']->fetchObject()) {
    в цикле делается запрос к базе. То есть метод dbTransaction() выполняется на каждой итерации и так до бесконечности
     
  5. xfreewindx

    xfreewindx Активный пользователь

    С нами с:
    22 фев 2012
    Сообщения:
    55
    Симпатии:
    0
    Точно.
    Спасибо.
    Ночами ведь спать нужно, правда? :)