In PHP kann die Funktion mySQLi_Result :: fetch_column in den Abfragergebnissen problemlos eine Datenspalte erhalten, wenn die MySQL -Datenbank verwendet wird. In Kombination mit dem Iteratormuster von PHP können wir große Datensätze effektiv durchqueren und die Speicherverwendung optimieren. In diesem Artikel wird erläutert, wie Sie eine effiziente Datenquelle erzielen, indem Sie MySQLI_Result :: Fetch_column und Iteratormuster verwenden.
Das Iteratormuster ist ein Entwurfsmuster, mit dem Sie konsistent durch eine Sammlung iterieren können, ohne die zugrunde liegende Darstellung der Sammlung freizulegen. Die Iterator -Schnittstelle von PHP bietet vier grundlegende Methoden:
current () : Gibt das aktuelle Element zurück.
KEY () : Gibt den Schlüsselnamen des aktuellen Elements zurück.
Weiter () : Bewegen Sie den inneren Zeiger auf das nächste Element.
valid () : Überprüfen Sie, ob es ein gültiges Element gibt.
In der MySQLI_Result :: Fetch_column -Funktion können Sie in PHP Daten aus einer Spalte Ihrer Abfrageergebnisse abrufen. Es gibt ein Array zurück, das alle Werte der angegebenen Spalte enthält. Seine Verwendung ist wie folgt:
<span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"SELECT id, name FROM users"</span></span><span>);
</span><span><span class="hljs-variable">$columnData</span></span><span> = </span><span><span class="hljs-variable">$result</span></span><span>-></span><span><span class="hljs-title function_ invoke__">fetch_column</span></span><span>(</span><span><span class="hljs-number">0</span></span><span>); </span><span><span class="hljs-comment">// Holen Sie sich die erste Datenspalte</span></span><span>
</span></span>
Wenn Sie Fetch_Column direkt verwenden, um alle Daten zu erhalten, werden alle Ergebnissätze gleichzeitig geladen, wodurch viel Speicher verwendet wird, wenn die Daten groß sind. Um die Effizienz zu verbessern, insbesondere wenn das Datenvolumen enorm ist, können die Daten allmählich mit dem Iteratormodus von PHP geladen werden, was den Speicher speichern und die Verarbeitungsgeschwindigkeit verbessern kann.
Um Daten über das Iteratormuster effizient zu verarbeiten, können wir eine Klasse erstellen, um die Iteratorschnittstelle zu implementieren. Diese Klasse wird das Objekt mySQLI_Result zusammenfassen und die Daten jeder Spalte allmählich über einen Iterator erhalten.
Zunächst erstellen wir eine MySQLiresultiterator -Klasse, die die Iterator -Schnittstelle implementiert. Diese Klasse kann Datenzeile nach Zeile aus dem Objekt mySQLi_Result abrufen und die von Fetch_Column bereitgestellten Daten verwenden.
<span><span><span class="hljs-class"><span class="hljs-keyword">class</span></span></span><span> </span><span><span class="hljs-title">MysqliResultIterator</span></span><span> </span><span><span class="hljs-keyword">implements</span></span><span> </span><span><span class="hljs-title">Iterator</span></span><span> {
</span><span><span class="hljs-keyword">private</span></span><span> </span><span><span class="hljs-variable">$result</span></span><span>;
</span><span><span class="hljs-keyword">private</span></span><span> </span><span><span class="hljs-variable">$column</span></span><span>;
</span><span><span class="hljs-keyword">private</span></span><span> </span><span><span class="hljs-variable">$position</span></span><span>;
</span><span><span class="hljs-keyword">private</span></span><span> </span><span><span class="hljs-variable">$data</span></span><span>;
</span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">__construct</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$result</span></span></span><span>, </span><span><span class="hljs-variable">$columnIndex</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>) {
</span><span><span class="hljs-variable language_">$this</span></span><span>->result = </span><span><span class="hljs-variable">$result</span></span><span>;
</span><span><span class="hljs-variable language_">$this</span></span><span>->column = </span><span><span class="hljs-variable">$columnIndex</span></span><span>;
</span><span><span class="hljs-variable language_">$this</span></span><span>->position = </span><span><span class="hljs-number">0</span></span><span>;
</span><span><span class="hljs-variable language_">$this</span></span><span>->data = [];
}
</span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">rewind</span></span><span>(</span><span><span class="hljs-params"></span></span><span>) {
</span><span><span class="hljs-comment">// Setzen Sie die Position des Iterators zurück</span></span><span>
</span><span><span class="hljs-variable language_">$this</span></span><span>->position = </span><span><span class="hljs-number">0</span></span><span>;
</span><span><span class="hljs-variable language_">$this</span></span><span>->data = </span><span><span class="hljs-variable language_">$this</span></span><span>->result-></span><span><span class="hljs-title function_ invoke__">fetch_column</span></span><span>(</span><span><span class="hljs-variable">$this</span></span><span>->column);
}
</span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">current</span></span><span>(</span><span><span class="hljs-params"></span></span><span>) {
</span><span><span class="hljs-comment">// Geben Sie die aktuellen Daten zurück</span></span><span>
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable language_">$this</span></span><span>->data[</span><span><span class="hljs-variable language_">$this</span></span><span>->position];
}
</span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">key</span></span><span>(</span><span><span class="hljs-params"></span></span><span>) {
</span><span><span class="hljs-comment">// Gibt den Schlüsselnamen des aktuellen Elements zurück</span></span><span>
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable language_">$this</span></span><span>->position;
}
</span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">next</span></span><span>(</span><span><span class="hljs-params"></span></span><span>) {
</span><span><span class="hljs-comment">// Bewegen Sie den inneren Zeiger auf das nächste Element</span></span><span>
++</span><span><span class="hljs-variable language_">$this</span></span><span>->position;
}
</span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">valid</span></span><span>(</span><span><span class="hljs-params"></span></span><span>) {
</span><span><span class="hljs-comment">// Überprüfen Sie, ob das aktuelle Element gültig ist</span></span><span>
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-keyword">isset</span></span><span>(</span><span><span class="hljs-variable language_">$this</span></span><span>->data[</span><span><span class="hljs-variable language_">$this</span></span><span>->position]);
}
}
</span></span>
Sobald die Iteratorklasse erstellt wurde, können wir sie leicht verwenden, um eine Datenspalte in den Ergebnissen von MySQL -Abfragen zu iterieren. Hier erfahren Sie, wie man es implementiert:
<span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">"localhost"</span></span><span>, </span><span><span class="hljs-string">"username"</span></span><span>, </span><span><span class="hljs-string">"password"</span></span><span>, </span><span><span class="hljs-string">"database"</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_error) {
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Connection failed: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_error);
}
</span><span><span class="hljs-variable">$query</span></span><span> = </span><span><span class="hljs-string">"SELECT id, name FROM users"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-variable">$query</span></span><span>);
</span><span><span class="hljs-comment">// Erstellen Sie eine Iteratorinstanz,Erhalten "id" Spaltendaten(Der Spaltenindex ist0)</span></span><span>
</span><span><span class="hljs-variable">$iterator</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">MysqliResultIterator</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>);
</span><span><span class="hljs-comment">// Wiederholen und alle ausgeben ID Daten</span></span><span>
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$iterator</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$key</span></span><span> => </span><span><span class="hljs-variable">$value</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"ID: <span class="hljs-subst">$value</span></span></span><span>\n";
}
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span></span>
In diesem Beispiel durchqueren wir die erste Datenspalte im Abfrageergebnis über Mysqliresultiterator und geben jede ID -Zeile nach Zeile aus. Mit dem Iteratormodus können wir nach und nach auf Daten zugreifen, ohne den gesamten Datensatz gleichzeitig zu laden, wodurch das Problem des übermäßigen Speicherverbrauchs vermieden wird.
In Kombination mit dem Iteratormuster hilft uns die Funktion Fetch_column nicht nur, Daten effizienter zu erhalten, sondern ermöglicht es uns auch, Daten Schritt für Schritt zu laden, anstatt alle Daten gleichzeitig in den Speicher zu laden. Dies ist sehr nützlich, um große Datenmengen zu behandeln, insbesondere wenn der Speicher eingeschränkt ist.
Durch die Kombination von MySQLI_Result :: Fetch_column und PHP -Iteratormodus können wir effiziente Durchlauf von MySQL -Abfrageergebnissen implementieren. Der Iteratormodus bietet eine speichereffiziente Möglichkeit, um zu vermeiden, dass das gesamte Abfrageergebnis gleichzeitig in Speicher geladen wird. Die Verwendung dieses Musters, die Wartbarkeit und Leistung Ihres Codes kann bei der Verarbeitung großer Datenmengen verbessert werden.
Verwandte Tags:
mysqli_result