Die Klasse Mysqli_result hat fetch_all()
Methode, die mehrere Zeilen gleichzeitig aus der Ergebnismenge in Form eines Arrays von Zeilen zurückgibt (tatsächlich ist dies ein zweidimensionales Array, da Zeilen bereits Arrays von Feldern sind). Auch eine Ergebnismenge hat die Methode fetch_object()
, die eine einzelne Zeile in Form eines Objekts zurückgibt.So erweitern Sie mysqli_result und fügen neue Methode hinzu
Jetzt möchte ich mysqli_result Klasse erweitern und neue Methode fetch_objects()
(Plural) hinzufügen, die ein assoziatives Array von Objekten zurückgeben würde, wo der Assoziationsschlüssel die Datensatz-ID [id => Object()] ist. Natürlich muss ich auch die mysqli-Klasse erweitern und die query() -Methode überschreiben, um meine erweiterte Ergebnismenge zurückzugeben. Aber ich verstehe nicht, wie die Übertragung von Verbindungs- und Abfrageparametern zwischen mysqli und mysqli_result erfolgt.
Dies sollte so funktionieren:
$db=new ReallyMySQLi(...); //initiating my mysqli
$myrst=$db->query($SQL); //returned my extended result
//fetch_objects() returning associative array of objects
//with record ID as associative key
foreach($myrst->fetch_objects() as $id=>$object)
{
echo 'Customer ID:'.$id; //or $object->id;
echo 'Customer firstname:'.$object->firstname;
echo 'Customer lastname:'.$object->lastname;
}
Schande über mich Ich weiß wirklich nicht, wie ich diese Notiz nicht gefunden habe (obwohl ich einige Zeit in der Suche verbrachte). Allerdings habe ich diesen Code getestet und es funktioniert !!! Aber ich verstehe immer noch nicht, wie es funktioniert !!! Was für eine Anweisung '$ this-> real_query ($ query)' in Database_MySQLi? Auch wenn mysqli 'return new Database_MySQLi_result ($ this) 'ausgibt, setzt es das erweiterte mysqli_result ein und sendet sich selbst als Argument an result, aber der Konstruktor des Ergebnisses hat keine Parameter! Ich bin immer noch verwirrt! – sbrbot
Ich weiß auch nicht über die Real_Query. Ich bin gerade vorbeigekommen und habe eine kleine Recherche gemacht und das gesehen. Ich dachte nur, ich könnte teilen. Gott schütze die öffentlichen, aber undokumentierten Variablen und Methoden! vielleicht hat er die Klasse mysqli_result einfach 'var_dump'eded und herausgefunden. –
Die Verwendung von 'real_query()' anstelle von 'query()' Methode ist hier entscheidend! Ich testete, dieser Code ** arbeitet nicht mit $ $ this-> query ($ query) '. real_query führt die Abfrage aus und lässt das Ergebnis in der Datenbank (ungepuffertes Ergebnis - speichert nur den Zeiger darauf in mysqli) und dieses Ergebnis sollte danach verwendet oder gespeichert werden. – sbrbot