Aktueller Standort: Startseite> Neueste Artikel> Wie kann man die Anzahl der Zeilen von Abfragestellen in Kombination mit den Funktionen von MySQL_Fetch_assoc und MySQL_NUM_ROWS effizient erhalten? Best Practice Sharing

Wie kann man die Anzahl der Zeilen von Abfragestellen in Kombination mit den Funktionen von MySQL_Fetch_assoc und MySQL_NUM_ROWS effizient erhalten? Best Practice Sharing

gitbox 2025-09-28

Bei Verwendung von PHP für Datenbankoperationen sind MySQL_Fetch_assoc () und mySQL_NUM_ROWS () zwei häufig verwendete Funktionen, mit denen die einzelnen Zeilendaten des Abfrageergebnissatzes und die Anzahl der Zeilen des Ergebnissatzes erhalten werden. Normalerweise müssen wir diese beiden Funktionen kombinieren, um Abfrageergebnisse effizient zu verarbeiten, insbesondere im Szenario, in dem wir nicht nur Daten abfragen, sondern auch die Anzahl der Ergebniszeilen erhalten.

1. Grundlegende Verwendung von mySQL_Fetch_assoc () und mySQL_NUM_ROWS ()

Bevor Sie mit der Kombination dieser beiden Funktionen diskutieren, eine kurze Überprüfung ihrer Funktionen.

  • MySQL_Fetch_assoc ($ Ergebnis) : Holen Sie sich eine Datenreihe aus dem Ergebnis -Set $ ​​-Ergebnis und gibt ein assoziatives Array zurück, in dem der Schlüssel des Arrays der Feldname ist und der Wert der Wert des Feldes ist. Jedes Mal, wenn es aufgerufen wird, wird die nächste Datenzeile im Ergebnissatz zurückgegeben, bis die Daten gelesen werden.

     <span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_fetch_assoc</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
    </span></span>
  • mysql_num_rows ($ result) : Gibt die Anzahl der Zeilen im Ergebnissatz zurück, dh die Anzahl der im Abfrageergebnis enthaltenen Zeilen. Es wird normalerweise verwendet, um festzustellen, ob die Abfrage erfolgreich ist, und die Gesamtzahl der Datenzeilen der Daten vor oder nach dem Erhalt der Daten zu bestimmen.

     <span><span><span class="hljs-variable">$num_rows</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_num_rows</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
    </span></span>

2. Häufiger fehlerhafter Verwendung

Viele Entwickler stoßen bei Verwendung dieser beiden Funktionen häufig auf ein Problem: Wenn mySQL_NUM_ROWS () aufgerufen wird, bevor MySQL_Fetch_assoc () aufgerufen wird, wird MySQL_Num_Rows () die Anzahl der Zeilen im gesamten Ergebnis -Set aufrufen, aber nach dem Aufrufen von MySQL_Fetch_AsChsoc () .

3.. Wie kann man Zeilen und Daten effizient erhalten?

Um das obige Problem zu lösen, können wir zunächst mySQL_NUM_ROWS () aufrufen, um die Anzahl der Zeilen des Ergebnissatzes zu erhalten, und dann mySQL_Fetch_assoc () zum Lesen der Datenzeile nach Zeile zu verwenden. Der Schlüssel ist, wie die Position des Cursor (Zeiger) des Abfrageergebnisses verwaltet wird. Hier sind mehrere häufige und effiziente Praktiken.

1. Berechnen Sie zuerst die Anzahl der Zeilen und durchqueren Sie dann den Ergebnissatz

Die häufigste Methode ist die Verwendung von MySQL_Fetch_assoc () , um die Datenzeile durch Zeilen zu lesen, nachdem die Anzahl der Zeilen des Abfrageergebnisses erhalten wurde. Der Vorteil dieser Methode besteht darin, dass die Gesamtmenge der Daten zuerst bestimmt werden kann, was die nachfolgende Verarbeitung erleichtert.

 <span><span><span class="hljs-variable">$query</span></span><span> = </span><span><span class="hljs-string">"SELECT * FROM users"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_query</span></span><span>(</span><span><span class="hljs-variable">$query</span></span><span>);

</span><span><span class="hljs-variable">$num_rows</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_num_rows</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>); </span><span><span class="hljs-comment">// Holen Sie sich zuerst die Anzahl der Zeilen</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Die Abfrageergebnisse haben <span class="hljs-subst">{$num_rows}</span></span></span><span> Zeilendaten。";

</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_fetch_assoc</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>)) {
    </span><span><span class="hljs-comment">// 处理每一Zeilendaten</span></span><span>
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Benutzername: "</span></span><span> . </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">'username'</span></span><span>] . </span><span><span class="hljs-string">"&lt;br&gt;"</span></span><span>;
}
</span></span>

Zu diesem Zeitpunkt berechnet MySQL_NUM_ROWS () zuerst die Gesamtzahl der Zeilen, und dann wird MySQL_Fetch_assoc () die Datenzeile nach Zeile lesen. In diesem Fall wird die Anzahl der von MySQL_NUM_ROWS ( ) bereitgestellten Zeilen, da der Zeiger auf das Ergebnis -Set bewegt wurde, MySQL_Fetch_assoc (), die die Gesamtzahl der Datensätze angezeigt wird, und ist nicht mehr mit der tatsächlichen Datenliederreihenfolge bezogen.

2. Verwenden Sie MySQL_Fetch_assoc (), um die Daten zu erhalten und zu zählen

Wenn Sie die Anzahl der Zeilen während des Durchquerens der Ergebnisse berechnen müssen, können Sie direkt in mysql_fetch_assoc () zählen, ohne sich auf mySQL_NUM_ROWS () zu verlassen. Dieser Ansatz gilt für Sie, die sich nicht um die Gesamtzahl der von der Datenbank zurückgegebenen Zeilen kümmern, sondern nur um die Verarbeitung der Daten.

 <span><span><span class="hljs-variable">$query</span></span><span> = </span><span><span class="hljs-string">"SELECT * FROM users"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_query</span></span><span>(</span><span><span class="hljs-variable">$query</span></span><span>);

</span><span><span class="hljs-variable">$row_count</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>;  </span><span><span class="hljs-comment">// Zum Zählen verwendet</span></span><span>
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_fetch_assoc</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>)) {
    </span><span><span class="hljs-comment">// Jede Zeile wird gelesen,Zählen eins</span></span><span>
    </span><span><span class="hljs-variable">$row_count</span></span><span>++;
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Benutzername: "</span></span><span> . </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">'username'</span></span><span>] . </span><span><span class="hljs-string">"&lt;br&gt;"</span></span><span>;
}

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Die Abfrageergebnisse haben <span class="hljs-subst">{$row_count}</span></span></span><span> Zeilendaten。";
</span></span>

In dieser Methode erhalten wir jede Datenreihe über mySQL_Fetch_assoc () und zählen sie manuell durch eine benutzerdefinierte $ row_count -Variable, wodurch die Leistungsbelastung vermieden wird, die durch mehrere Aufrufe an mysql_num_rows () verursacht wird.

3.. Effizient große Datensätze verarbeiten (vermeiden Sie die Gesamtzahl der Zeilen im Voraus)

Das Berechnen der Gesamtzahl der Zeilen kann bei der Arbeit mit sehr großen Datensätzen eine Leistungsbelastung sein. Um die Effizienz zu verbessern, vermeiden Sie es am besten, die Anzahl der Zeilen vor dem Lesen der Daten zu zählen, aber die Daten direkt zu verarbeiten. Sie können mySQL_Fetch_assoc () verwenden, um Datenschleifen zu verarbeiten und die Anzahl der Zeilen dynamisch zu berechnen.

 <span><span><span class="hljs-variable">$query</span></span><span> = </span><span><span class="hljs-string">"SELECT * FROM users"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_query</span></span><span>(</span><span><span class="hljs-variable">$query</span></span><span>);

</span><span><span class="hljs-variable">$row_count</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>;
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_fetch_assoc</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>)) {
    </span><span><span class="hljs-variable">$row_count</span></span><span>++;
    </span><span><span class="hljs-comment">// Verarbeitungsdaten</span></span><span>
}

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Es gibt insgesamt insgesamt <span class="hljs-subst">{$row_count}</span></span></span><span> Zeilendaten。";
</span></span>

Der Vorteil dieses Ansatzes besteht darin, dass er die Leistung bei der direkten Verarbeitung von Daten erheblich verbessern kann, ohne zusätzliche Berechnungen durchzuführen, insbesondere wenn große Datenvolumina abfragen.

4. Zusammenfassung

  1. Vermeiden Sie mehrere Aufrufe bei mySQL_NUM_ROWS () : Der Anruf bei MySQL_NUM_ROWS () scannt den gesamten Ergebnissatz, was die Leistung beeinflusst. Es ist am besten, die Daten direkt durch mySQL_fetch_assoc () zu durchqueren, ohne die Gesamtzahl der Zeilen zu erfordern.

  2. Wählen Sie einen Plan nach den tatsächlichen Anforderungen aus : Wenn Sie wirklich die Anzahl der Zeilen abfragen müssen, können Sie zuerst mySQL_NUM_ROWS () aufrufen. Wenn Sie nur jede Datenzeile verarbeiten müssen, können Sie sie über mySQL_Fetch_assoc () implementieren und manuell zählen.

  3. Vermeiden Sie es , MySQL_NUM_ROWS () für große Datensätze zu verwenden : Voranhandlung der Anzahl der Zeilen im Voraus kann unnötige Leistungsaufwand mit sich bringen, wenn die Abfrageergebnisse sehr groß sind. Die direkte Durchführung von Daten und die Verarbeitung in Echtzeit ist ein effizienterer Ansatz.

Durch die Verwendung dieser beiden Funktionen können Sie die Daten in den Abfrageergebnissen effizienter erhalten und verarbeiten, wodurch die Leistung und Reaktionsgeschwindigkeit des Systems verbessert werden.