Writerim
@Writerim
Заполнить позже...

Где найти код объекта Iterator mysql?

Где то видел код где создается обхект интерфейса Iterator и разбирает результат mysqli

Нашел только пока что разбор массива

<?php

class eliterator implements Iterator
{
  private $var = array();

  public function __construct($array)
  {
    if (is_array($array)) {
        $this->var = $array;
    }
  }

  public function rewind()
  {
  	echo "mysql query\n";
    reset($this->var);
  }

  public function current()
  {
    $var = current($this->var);
    return $var;
  }

  public function key() 
  {
    return $var;
  }

  public function next() 
  {
    $var = next($this->var);
    echo "следующий: $var\n";
    return $var;
  }

  public function valid()
  {
    $key = key($this->var);
    $var = ($key !== NULL && $key !== FALSE);
    return $var;
  }

}


Спасибо всем. Кому интересно, получилось нечто подобное. Код намерено сокращен сокращен.

<?php

class eliterator implements Iterator {
  private $position = 0;
  private $resource = null;

  public function __construct($sql) {
    $this->position = 0;
    $this->resource = mysql_query($sql);
  }

  function rewind() {
    $this->position = 0;
  }

  function current() {
    mysql_data_seek($this->resource,$this->position );
    $value = mysql_fetch_assoc($this->resource);
    return new user($value);
  }

  function key() {
    return $this->position;
  }

  function next() {
    ++$this->position;
  }

  function valid() {
    return mysql_fetch_assoc($this->resource);
  }
}

class user{

	function __construct($array = ''){
		/* преобразование массива в объект */
		foreach($array as $key => $value){
			$this->$key = $value;
		}
	}
}

$link = mysql_connect('...', '...', '...');
if (!$link) {
    die('Не удалось соединиться : ' . mysql_error());
}

// выбираем foo в качестве текущей базы данных
$db_selected = mysql_select_db('...', $link);
if (!$db_selected) {
    die ('Не удалось выбрать базу foo: ' . mysql_error());
}

foreach(new eliterator("SELECT * FROM user") as $iUser){
	var_dump($iUser);
}



/* Возвращаемый результат */

object(user)#3 (10) {
  ["id"]=>
  string(1) "..."
  ["fio"]=>
  string(0) "..."
  ["login"]=>
  string(17) "..."
  ["pass"]=>
  string(0) "..."
  ["e_mail"]=>
  string(0) "..."
  ["active"]=>
  string(1) "..."
  ["type"]=>
  string(1) "..."
}
object(user)#4 (10) {
  ["id"]=>
  string(1) "..."
  ["fio"]=>
  string(0) "..."
  ["login"]=>
  string(15) "..."
  ["pass"]=>
  string(0) "..."
  ["e_mail"]=>
  string(0) "..."
  ["active"]=>
  string(1) "..."
  ["type"]=>
  string(1) "..."
}
  • Вопрос задан
  • 370 просмотров
Решения вопроса 1
foreach (new MySQLiQueryIterator($db, $query) as $result)
{
        if ($result) 
       {
                while ($row = mysqli_fetch_row($result)) {
                    print "$row[0]\n";
                }
        }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Melkij
@Melkij
PostgreSQL DBA
Можно полюбопытствовать - вам для чего? Класс mysqli_result уже давно реализует iterator сам по себе.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы