mysqli_result::fetch_object

mysqli_fetch_object

(PHP 5)

mysqli_result::fetch_object -- mysqli_fetch_objectReturns the current row of a result set as an object

Description

Object oriented style

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

Procedural style

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

The mysqli_fetch_object() will return the current row result set as an object where the attributes of the object represent the names of the fields found within the result set.

Note that mysqli_fetch_object() sets the properties of the object before calling the object constructor.

Parameters

result

Procedural style only: A result set identifier returned by mysqli_query(), mysqli_store_result() or mysqli_use_result().

class_name

The name of the class to instantiate, set the properties of and return. If not specified, a stdClass object is returned.

params

An optional array of parameters to pass to the constructor for class_name objects.

Return Values

Returns an object with string properties that corresponds to the fetched row or NULL if there are no more rows in resultset.

Note: Field names returned by this function are case-sensitive.

Note: This function sets NULL fields to the PHP NULL value.

Changelog

Version Description
5.0.0 Added the ability to return as a different object.

Examples

Example #1 Object oriented style

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

/* check connection */
if (mysqli_connect_errno()) {
    
printf("Connect failed: %s\n"mysqli_connect_error());
    exit();
}
 
$query "SELECT Name, CountryCode FROM City ORDER by ID DESC LIMIT 50,5";

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

    
/* fetch object array */
    
while ($obj $result->fetch_object()) {
        
printf ("%s (%s)\n"$obj->Name$obj->CountryCode);
    }

    
/* free result set */
    
$result->close();
}

/* close connection */
$mysqli->close();
?>

Example #2 Procedural style

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

/* check connection */
if (mysqli_connect_errno()) {
    
printf("Connect failed: %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)) {

    
/* fetch associative array */
    
while ($obj mysqli_fetch_object($result)) {
        
printf ("%s (%s)\n"$obj->Name$obj->CountryCode);
    }

    
/* free result set */
    
mysqli_free_result($result);
}

/* close connection */
mysqli_close($link);
?>

The above examples will output:

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

See Also

Коментарии

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

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