mysqli_result::fetch_object

mysqli_fetch_object

(PHP 5, PHP 7, PHP 8)

mysqli_result::fetch_object -- mysqli_fetch_object — Retourne la ligne suivante d'un ensemble de rĂ©sultats sous forme d'objet

Description

Style orienté objet

public function mysqli_result::fetch_object(string $class = "stdClass", array $constructor_args = []): object|null|false

Style procédural

function mysqli_fetch_object(mysqli_result $result, string $class = "stdClass", array $constructor_args = []): object|null|false

Retourne une ligne de donnĂ©es dans le jeu de rĂ©sultats et la renvoie sous forme d'objet, oĂč chaque propriĂ©tĂ© reprĂ©sente le nom de la colonne du jeu de rĂ©sultats. Chaque appel ultĂ©rieur Ă  cette fonction renverra la ligne suivante dans l'ensemble de rĂ©sultats, ou null s'il n'y a plus de lignes.

Si deux ou plusieurs colonnes du rĂ©sultat ont le mĂȘme nom, la derniĂšre colonne sera prioritaire et Ă©crasera toutes les donnĂ©es prĂ©cĂ©dentes. Pour accĂ©der Ă  plusieurs colonnes portant le mĂȘme nom, la mysqli_fetch_row() peut ĂȘtre utilisĂ©e pour rĂ©cupĂ©rer le tableau indexĂ© numĂ©riquement ou des alias peuvent ĂȘtre utilisĂ©s dans la liste de sĂ©lection de la requĂȘte SQL pour donner des noms diffĂ©rents aux colonnes.

Note: Cette fonction affecte les propriétés de l'objet avant d'en appeler le constructeur.

Note: Les noms des champs retournés par cette fonction sont sensibles à la casse.

Note: Cette fonction définit les champs NULL à la valeur PHP null.

Liste de paramĂštres

result
Style procédural uniquement : Un objet mysqli_result retourné par mysqli_query(), mysqli_store_result(), mysqli_use_result(), ou mysqli_stmt_get_result().
class

Le nom de la classe à instancier. Si non fourni, un objet stdClass sera retourné.

constructor_args

Un tableau de paramĂštres (optionnel) Ă  passer au constructeur de l'objet class.

Valeurs de retour

Retourne un objet reprĂ©sentant la ligne rĂ©cupĂ©rĂ©e, oĂč chaque propriĂ©tĂ© reprĂ©sente le nom de la colonne du jeu de rĂ©sultats, null s'il n'y a plus de lignes dans le jeu de rĂ©sultats, ou false si une erreur survient.

Erreurs / Exceptions

Une ValueError est lancée quand constructor_args n'est pas vide et que la classe n'a pas de constructeur.

Historique

Version Description
8.3.0 Lance désormais une exception ValueError quand constructor_args n'est pas vide et que la classe n'a pas de constructeur ; précédemment, une exception Exception était déclenchée.
8.0.0 constructor_args accepte désormais [] pour les constructeurs avec 0 paramÚtre ; auparavant une exception était lancée.

Exemples

Exemple #1 Exemple mysqli_result::fetch_object()

Style orienté objet

<?php

mysqli_report
(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

$query = "SELECT Name, CountryCode FROM City ORDER BY ID DESC";

$result = $mysqli->query($query);

while (
$obj = $result->fetch_object()) {
printf("%s (%s)\n", $obj->Name, $obj->CountryCode);
}

Style procédural

<?php

mysqli_report
(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$link = mysqli_connect("localhost", "my_user", "my_password", "world");

$query = "SELECT Name, CountryCode FROM City ORDER BY ID DESC";

$result = mysqli_query($link, $query);

while (
$obj = mysqli_fetch_object($result)) {
printf("%s (%s)\n", $obj->Name, $obj->CountryCode);
}

Les exemples ci-dessus vont afficher quelque chose de similaire Ă  :

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

Voir aussi

  • mysqli_fetch_array() - RĂ©cupĂšre la ligne suivante d'un ensemble de rĂ©sultats sous forme de tableau associatif, numĂ©rique ou les deux
  • mysqli_fetch_assoc() - RĂ©cupĂšre la ligne suivante d'un ensemble de rĂ©sultats sous forme de tableau associatif
  • mysqli_fetch_column() - RĂ©cupĂšre une seule colonne de la ligne suivante d'un jeu de rĂ©sultats
  • mysqli_fetch_row() - RĂ©cupĂšre une ligne de rĂ©sultat sous forme de tableau indexĂ©
  • mysqli_query() - ExĂ©cute une requĂȘte sur la base de donnĂ©es
  • mysqli_data_seek() - DĂ©place le pointeur interne de rĂ©sultat
add a note

User Contributed Notes 5 notes

up
25
Driek ¶
13 years ago
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.
up
16
neo22s at gmail dot com ¶
10 years ago
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
up
15
object-array at gmail dot com ¶
10 years ago
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:
http://php.net/manual/en/language.oop5.cloning.php
up
6
macole at paypal dot com ¶
9 years ago
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
up
9
benpptung at tacol dot biz ¶
16 years ago
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