Make sure to specify the full namespace for the "string $class_name" parameter and not a partial one, as it won't find it. For example:
<?php
namespace Root(backslash)FirstLevel
{
public static function Test($result)
{
return mysqli_fetch_object($result, 'SecondLevel\\MyClass');
}
}
?>
... will not work but this will:
<?php
namespace Root(backslash)FirstLevel
{
public static function Test($result)
{
return mysqli_fetch_object($result, 'Root\\FirstLevel\\SecondLevel\\MyClass');
}
}
?>
mysqli_result::fetch_object
mysqli_fetch_object
(PHP 5)
mysqli_result::fetch_object -- mysqli_fetch_object — Retourne la ligne courante d'un jeu de résultat sous forme d'objet
Description
Style orienté objet
$class_name
[, array $params
]] )Style procédural
La fonction mysqli_fetch_object() retourne la ligne courante du jeu de résultat sous forme d'objet dont les attributs représentent les noms des champs trouvés dans le jeu de résultats.
Notez que mysqli_fetch_object() affecte les attributs de l'objet avant d'en appeler le constructeur.
Liste de paramètres
-
result -
Style procédural uniquement : Un identifiant de jeu de résultats retourné par la fonction mysqli_query(), mysqli_store_result() ou mysqli_use_result().
-
class_name -
Le nom de la classe à instancier. Si non fourni, un objet stdClass sera retourné.
-
params -
Un tableau de paramètres (optionnel) à passer au constructeur de l'objet
class_name.
Valeurs de retour
Retourne un objet avec les propriétés qui correspondent à la ligne récupérée ou NULL s'il
n'y a plus de ligne dans le jeu de résultat.
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.
Historique
| Version | Description |
|---|---|
| 5.0.0 | Ajoute la possibilité de retourner le résultat dans un objet différent. |
Exemples
Exemple #1 Style orienté objet
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
/* Vérification de la connexion */
if (mysqli_connect_errno()) {
printf("Échec de la connexion : %s\n", mysqli_connect_error());
exit();
}
$query = "SELECT Name, CountryCode FROM City ORDER by ID DESC LIMIT 50,5";
if ($result = $mysqli->query($query)) {
/* Récupère un tableau d'objets */
while ($obj = $result->fetch_object()) {
printf ("%s (%s)\n", $obj->Name, $obj->CountryCode);
}
/* free result set */
$result->close();
}
/* Fermeture de la connexion */
$mysqli->close();
?>
Exemple #2 Style procédural
<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
/* Vérification de la connexion */
if (mysqli_connect_errno()) {
printf("Échec de la connexion : %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)) {
/* Récupère un tableau d'objets */
while ($obj = mysqli_fetch_object($result)) {
printf ("%s (%s)\n", $obj->Name, $obj->CountryCode);
}
/* free result set */
mysqli_free_result($result);
}
/* Fermeture de la connexion */
mysqli_close($link);
?>
Les exemples ci-dessus vont afficher :
Pueblo (USA) Arvada (USA) Cape Coral (USA) Green Bay (USA) Santa Clara (USA)
Voir aussi
- mysqli_fetch_array() - Retourne une ligne de résultat sous la forme d'un tableau associatif, d'un tableau indexé, ou les deux
- mysqli_fetch_assoc() - Récupère une ligne de résultat sous forme de tableau associatif
- 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
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
If your SQL code selects columns with empty names like so:
SELECT id as ``...
You will get a fatal error "Cannot access empty property", this took me a while to track down!
Obviously your SQL really shouldn't do that, and should be fixed but I'm going to submit a feature request to ask for a better error message for that.
