mysqli_result::fetch_object

mysqli_fetch_object

(PHP 5)

mysqli_result::fetch_object -- mysqli_fetch_object Возвращает текущую строку результирующего набора в виде объекта

Описание

Объектно-ориентированный стиль

object mysqli_result::fetch_object ([ string $class_name [, array $params ]] )

Процедурный стиль

object mysqli_fetch_object ( mysqli_result $result [, string $class_name [, array $params ]] )

mysqli_fetch_object() вернет текущую строку результирующей таблицы в виде объекта, атрибуты которого будут соответствовать именам столбцов таблицы.

Важно заметить, что mysqli_fetch_object() задает значения свойств объекта до вызова его конструктора.

Список параметров

result

Только для процедурного стиля: Идентификатор результата запроса, полученный с помощью mysqli_query(), mysqli_store_result() или mysqli_use_result().

class_name

Имя класса, объект которого требуется инстанцировать, задать значения его свойств и вернуть. Если параметр не задан, будет возвращен объект stdClass.

params

Необязательный массив (array) параметров, которые будут переданы конструктору класса class_name.

Возвращаемые значения

Возвращает объект со строковыми свойствами, соответствующими значениям в выбранной строке или NULL, если в результирующем наборе нет доступных строк.

Замечание: Имена полей, возвращаемые этой функцией являются регистро-зависимыми.

Замечание: Эта функция устанавливает NULL-поля в значение NULL PHP.

Список изменений

Версия Описание
5.0.0 Добавлена возможность возвращать объекты различных классов.

Примеры

Пример #1 Объектно-ориентированный стиль

<?php
$mysqli 
= new mysqli("localhost""my_user""my_password""world");

/* проверка подключения */
if (mysqli_connect_errno()) {
    
printf("Не удалось подключиться: %s\n"mysqli_connect_error());
    exit();
}
 
$query "SELECT Name, CountryCode FROM City ORDER by ID DESC LIMIT 50,5";

if (
$result $mysqli->query($query)) {

    
/* выборка данных и помещение их в объекты */
    
while ($obj $result->fetch_object()) {
        
printf ("%s (%s)\n"$obj->Name$obj->CountryCode);
    }

    
/* очищаем результирующий набор */
    
$result->close();
}

/* закрываем подключение */
$mysqli->close();
?>

Пример #2 Процедурный стиль

<?php
$link 
mysqli_connect("localhost""my_user""my_password""world");

/* проверка подключения */
if (mysqli_connect_errno()) {
    
printf("Не удалось подключиться: %s\n"mysqli_connect_error());
    exit();
}

$query "SELECT Name, CountryCode FROM City ORDER by ID DESC LIMIT 50,5";

if (
$result mysqli_query($link$query)) {

    
/* выборка данных и помещение их в объекты */
    
while ($obj mysqli_fetch_object($result)) {
        
printf ("%s (%s)\n"$obj->Name$obj->CountryCode);
    }

    
/* очищаем результирующий набор */
    
mysqli_free_result($result);
}

/* закрываем подключение */
mysqli_close($link);
?>

Результат выполнения данных примеров:

Pueblo (USA)
Arvada (USA)
Cape Coral (USA)
Green Bay (USA)
Santa Clara (USA)

Смотрите также

  • mysqli_fetch_array() - Выбирает одну строку из результирующего набора и помещает ее в ассоциативный массив, обычный массив или в оба
  • mysqli_fetch_assoc() - Извлекает результирующий ряд в виде ассоциативного массива
  • mysqli_fetch_row() - Получение строки результирующей таблицы в виде массива
  • mysqli_query() - Выполняет запрос к базе данных
  • mysqli_data_seek() - Перемещает указатель результата на выбранную строку

Коментарии

I don't know why no one talk about this.
fetch_object is very powerful since you can instantiate an Object which has the methods you wanna have.

You can try like this..

<?php
class PowerfulVO extends AbstractWhatEver {

    public 
$field1;
    private 
$field2// note : private is ok

   
public function method(){
       
// method in this class
   
}
}

     
$sql "SELECT * FROM table ..."
     
$mysqli = new mysqli(........);
     
$result $mysqli->query($sql);
     
$vo $result->fetch_object('PowerfulVO');
?>

Note : if the field is not defined in the class, fetch_object will add this field for you as public.

The method is very powerful, especially if you want to use a VO design pattern or class mapping feature with Flex Remoting Object( Of course, you need to have ZendAMF or AMFPHP ..framework)

Hope this help and open new possibilities for you
2009-08-08 23:04:09
http://php5.kiev.ua/manual/ru/mysqli-result.fetch-object.html
Автор:
As indicated in the user comments of the mysql_fetch_object, it is important to realize that class fields get values assigned to them BEFORE the constructor is called.
For example;
<?php

class Employee
{
  private 
$id;

  public function 
__construct($id 0)
  {
   
$this->id $id;
  }
}

// some code for creating a database connection... i.e. mysqli object
....
$result $con->query("select id, name from employees");
$anEmployee $result->fetch_object("Employee");
?>
will result in the ID being 0 because it is overridden by the constructor. Therefore, it is useful to check if the class field is already set.
I.e.
<?php
class Employee
{
  private 
$id;

  public function 
__construct($id 0)
  {
    if (!
$this->id)
    {
       
$this->id $id 
   
}
  }
}
?>
Also note that the fields which will be assigned by fetch_object are case sensitive. If your table has the field "ID", it will result in the class field $ID being set. A simple work-around is to use aliases. I.e. "SELECT *, ID as id FROM myTable"
I hope this helps some people.
2012-06-26 20:18:46
http://php5.kiev.ua/manual/ru/mysqli-result.fetch-object.html
Please mind the difference between objects and arrays in PHP>=5: arrays are by value while objects are by reference.

<?
$o 
mysqli_fetch_object($res);
$o1 $o;
$o1->value 10;

$a mysqli_fetch_array($res);
$a1 $a;
$a1['value'] = 10;

echo 
$o->value// 10
echo $a['value']; // (original value from db)
?>

Should same behaviour be intended, the object needs to be cloned:

<?
$o1 
= clone $o;
?>

More about object cloning:
language.oop5.cloning
2016-02-17 10:56:34
http://php5.kiev.ua/manual/ru/mysqli-result.fetch-object.html
Since 5.6.21 and PHP 7.0.6

mysqli_fetch_object() sets the properties of the object AFTER calling the object constructor. Not BEFORE as was in previous versions.

So behaviour has changed. Seems a bug but not sure if was done intentionally.

https://bugs.php.net/bug.php?id=72151
2016-05-08 11:04:43
http://php5.kiev.ua/manual/ru/mysqli-result.fetch-object.html
Note that if you supply a class that has a __set() magic method defined in it, that method will be called for any properties that are not defined in your class.  For example:

<?php

class SomeClass {
    private 
$id;
    public 
$partner_name;
    public function 
__set$name$value ) {
        echo 
"__set was called!  Name = $name\n";
       
$this->$name $value;
    }
}

$db = new mysqli'localhost''Username''Password''DbName' );
$result $db->query'SELECT id, partner_name, partner_type FROM submissions' );
$object $result->fetch_object'SomeClass' );

?>

Produces the following output:

__set was called!  Name = partner_type
2016-06-30 17:56:58
http://php5.kiev.ua/manual/ru/mysqli-result.fetch-object.html

    Поддержать сайт на родительском проекте КГБ