In der täglichen Entwicklung müssen wir häufig das Ergebnissatz aus der MySQL -Datenbank erhalten und den Ergebnissatz durchqueren. Standardmäßig wird das von MySQLI_Query zurückgegebene Ergebnis in Abfragereihenfolge gespeichert. Wenn wir ein Ergebnissatz wünschen, gibt es verschiedene Möglichkeiten, dies zu tun. Eine der einfachen und effizienten Möglichkeiten besteht darin, die MySQLI_Result :: Data_seek -Funktion von PHP zu verwenden.
MySQLI_Result :: Data_seek ist eine von PHP bereitgestellte Methode, mit der Entwickler den internen Zeiger des Ergebniss in eine angegebene Zeile verschieben können. Die grundlegende Verwendung ist wie folgt:
<span><span>mysqli_result::</span><span><span class="hljs-title function_ invoke__">data_seek</span></span><span>(</span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$offset</span></span><span>): </span><span><span class="hljs-keyword">bool</span></span><span>
</span></span>$ offset repräsentiert den Index der Zielzeile ab 0 .
Der Rückgabewert ist der Boolesche Typ, wenn True erfolgreich zurückgegeben wird, wird falsch zurückgegeben, wenn Falsch fehlgeschlagen ist.
Wenn wir das in umgekehrte Reihenfolge festgelegte Ergebnis durchqueren möchten, besteht die am stärksten direkte Möglichkeit darin, aus der letzten Zeile des Ergebnisssatzes vorwärts zu lesen, ohne die Reihenfolge mit ... Desc in SQL -Abfrage verwenden zu müssen. Dies kann in einigen Fällen den Druck auf die Datenbank verringern, insbesondere wenn das Datenvolumen sehr groß ist.
Angenommen, wir haben eine MySQL -Tabelle -Benutzer , die die Feld -ID und den Namen enthält, und möchten die Benutzerliste in umgekehrter Reihenfolge ausgeben:
<span><span><span class="hljs-meta"><?php</span></span><span>
</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">"Verbindung ist fehlgeschlagen: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_error);
}
</span><span><span class="hljs-variable">$sql</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">$sql</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span>) {
</span><span><span class="hljs-variable">$num_rows</span></span><span> = </span><span><span class="hljs-variable">$result</span></span><span>->num_rows;
</span><span><span class="hljs-comment">// Umgekehrter Reihenfolge -Ergebnissergebnis Set</span></span><span>
</span><span><span class="hljs-keyword">for</span></span><span> (</span><span><span class="hljs-variable">$i</span></span><span> = </span><span><span class="hljs-variable">$num_rows</span></span><span> - </span><span><span class="hljs-number">1</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span> >= </span><span><span class="hljs-number">0</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span>--) {
</span><span><span class="hljs-variable">$result</span></span><span>-></span><span><span class="hljs-title function_ invoke__">data_seek</span></span><span>(</span><span><span class="hljs-variable">$i</span></span><span>); </span><span><span class="hljs-comment">// Bewegen Sie den internen Zeiger auf die $i OK</span></span><span>
</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-variable">$result</span></span><span>-></span><span><span class="hljs-title function_ invoke__">fetch_assoc</span></span><span>();
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"ID: "</span></span><span> . </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">'id'</span></span><span>] . </span><span><span class="hljs-string">", Name: "</span></span><span> . </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">'name'</span></span><span>] . </span><span><span class="hljs-string">"\n"</span></span><span>;
}
</span><span><span class="hljs-variable">$result</span></span><span>-></span><span><span class="hljs-title function_ invoke__">free</span></span><span>();
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Abfrage fehlgeschlagen: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->error;
}
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>$ result-> num_rows erhält die Gesamtzahl der Zeilen des Ergebnissatzes.
Die für die Schleife startet aus der letzten Zeile $ num_rows - 1 und geht Schritt für Schritt vorwärts.
Verwenden Sie $ result-> data_seek ($ i), um die angegebene Zeile zu finden.
Rufen Sie $ result-> fetch_assoc () auf, um die aktuellen Zeilendaten zu erhalten.
Diese Methode erfordert nicht die Änderung der SQL -Abfragebestellung und ist in einigen Szenarien, in denen die Traversalreihenfolge dynamisch steuern, sehr nützlich.
Vorteil :
Einfach und einfach zu bedienen, steuern Sie direkt die Traversalreihenfolge auf PHP -Ebene.
Sehr effizient für kleine Ergebnisse.
Anmerkungen :
Bei großen Ergebnismengen wird immer noch empfohlen, die Reihenfolge zu verwenden, um die SQL -Ebene zu sortieren.
Data_seek gilt nur für MySQLi_Result- Objekte, die von mySQLI_Query zurückgegeben wurden, und nicht für nicht gepufferte Abfragen.
Mit MySQLI_Result :: Data_seek können wir problemlos umgekehrte Reihenfolge des Ergebnisssatzes implementieren, ohne sich auf die Sortierfunktion von SQL zu verlassen. Es bietet PHP -Entwicklern flexiblere Kontrollmethoden, insbesondere für Szenarien, in denen Abfrageergebnisse dynamisch verarbeitet werden.
Verwandte Tags:
mysqli_result