Aktueller Standort: Startseite> Neueste Artikel> Wie benutze ich Pdostatement :: RowCount? Wie bekomme ich die Anzahl der Ergebnisreihen nach einer Merge -Abfrage (Union) durch sie?

Wie benutze ich Pdostatement :: RowCount? Wie bekomme ich die Anzahl der Ergebnisreihen nach einer Merge -Abfrage (Union) durch sie?

gitbox 2025-05-28

In der PHP -Entwicklung ist die Verwendung von PDO für Datenbankvorgänge eine der empfohlenen Möglichkeiten. Pdostatement :: rowCount () ist eine von PDO bereitgestellte Methode, um die Anzahl der von der vorherigen SQL -Anweisung betroffenen Zeilen zurückzugeben. Das Verhalten variiert jedoch geringfügig zwischen verschiedenen SQL -Anweisungstypen, insbesondere wenn es bei der Ausführung von Auswahl- , Aktualisierungs- , Löschen- und Gewerkschaftsabfragen ausführte. Es ist notwendig, den dahinter stehenden Mechanismus zu verstehen.

In diesem Artikel wird die grundlegende Verwendung von pdostatement :: rowCount () vorgestellt und eingehender untersucht, wie er bei der Verarbeitung von Abfrageberichten für die Verarbeitung von Gewerkschaften und der Methode zur korrekten Zählung der Anzahl der Zeilen des Zusammenführungsgebnisses korrekt gezählt wird.

1. Grundnutzung von Pdostatement :: RowCount ()

Wenn RowCount () löschen , einfügen oder aktualisieren , können Sie die Anzahl der betroffenen Zeilen zurückgeben. Beispiele sind wie folgt:

 <?php
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'user', 'pass');
$stmt = $pdo->prepare("UPDATE users SET status = 'active' WHERE last_login > NOW() - INTERVAL 30 DAY");
$stmt->execute();

echo "Aktualisiert " . $stmt->rowCount() . " Zeilenaufzeichnungen。";
?>

Im obigen Code gibt RowCount () die Anzahl der aktualisierten Zeilen zurück.

Bei der Ausführung einer Select -Abfrage funktioniert RowCount () jedoch nicht immer wie erwartet. Für die meisten Datenbanken (insbesondere MySQL) gibt RowCount () unter der Standardeinstellung PDO :: MySQL_ATTR_USE_BUFFERREERD_QUERY nicht die Anzahl der Ergebniszeilen in der Auswahlabfrage zurück, gibt jedoch 0 zurück.

2. Erreichen Sie die Anzahl der Ergebniszeilen in der Auswahlabfrage korrekt

Wenn Sie eine ausgewählte Abfrage verwenden und die Anzahl der Zeilen des Ergebnisses abrufen möchten, besteht die empfohlene Methode darin, alle Ergebnisse zu erhalten und sie über Count () zu berechnen, z. B. über Count ():

 <?php
$stmt = $pdo->query("SELECT * FROM articles WHERE category = 'php'");
$results = $stmt->fetchAll();

echo "Es gibt insgesamt " . count($results) . " Aufzeichnen。";
?>

3. Die Anzahl der Zeilen bei der Verwendung von Union -Abfragen

Union ist die Syntax in SQL zum Zusammenführen von zwei oder mehr Auswahlabfrageergebnissen . Standardmäßig entfernt es doppelte Zeilen ( Union All wird verwendet, wenn Sie doppelte Zeilen aufbewahren möchten). Wie kann man also die Anzahl der Zeilen von Union -Abfrageergebnissen durch PDO erhalten?

Fehlerdemonstration:

 <?php
$stmt = $pdo->query("SELECT name FROM authors UNION SELECT name FROM editors");
echo $stmt->rowCount(); // In den meisten MySQL Falls es zurückkehrt 0
?>

Dies liegt daran, dass RowCount () die Rückgabe der Ergebniszeile für ausgewählte Abfragen in MySQL nicht unterstützt.

Richtiger Weg: Fetchall + Count

 <?php
$stmt = $pdo->query("
    SELECT name FROM authors
    UNION
    SELECT name FROM editors
");

$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo "合并查询后Es gibt insgesamt " . count($rows) . " Aufzeichnen。";
?>

Diese Methode erhält alle Ergebnisse über Fetchall () und zählt dann die Anzahl der Zeilen mit count () . Es kann nicht nur die Anzahl der zusammengeführten Ergebnisse der Union -Abfrage korrekt erhalten, sondern auch für andere komplexe Auswahlabfragen geeignet sein.

4. Holen Sie sich die Anzahl der Zeilen, wenn Sie Union All verwenden

Wenn Sie Union alle verwenden (keine Deduplizierung), können Sie auch dieselbe Methode verwenden, um alle Datensätze zu erhalten:

 <?php
$stmt = $pdo->query("
    SELECT name FROM authors
    UNION ALL
    SELECT name FROM editors
");

$rows = $stmt->fetchAll();
echo "UNION ALL Die Anzahl der Zeilen im Abfrageergebnis ist:" . count($rows);
?>

5. Tipps: Wie man mit Gewerkschaftsabfragen umgeht, Paging

Wenn Ihre Gewerkschaftsabfrageergebnisse viele sind und ausgelegt werden müssen, können Sie die gesamte Union -Abfrage als Unterabfrage verwenden, um Paginierung zu bewältigen:

 <?php
$page = 1;
$limit = 10;
$offset = ($page - 1) * $limit;

$sql = "
    SELECT * FROM (
        SELECT name FROM authors
        UNION
        SELECT name FROM editors
    ) AS combined
    LIMIT :limit OFFSET :offset
";

$stmt = $pdo->prepare($sql);
$stmt->bindValue(':limit', $limit, PDO::PARAM_INT);
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->execute();

$results = $stmt->fetchAll();
foreach ($results as $row) {
    echo $row['name'] . "<br>";
}
?>

Zusammenfassen

  • Pdostatement :: rowCount () gibt normalerweise keine gültigen Ergebnisse für ausgewählte Aussagen zurück (insbesondere in MySQL).

  • Die Verwendung von Fetchall () + count () ist eine allgemeinere und zuverlässigere Möglichkeit, um die Anzahl der Abfragestreihen zu erhalten.

  • Für Union oder Union alle Fragen wird auch empfohlen, Fetchall () zu verwenden, um die Array -Länge zu zählen, um die Gesamtzahl der Zeilen zu erhalten.

  • Wenn Sie die Merge -Abfrage durchführen müssen, können Sie das Gewerkschaftsergebnis als Unterabfrage verarbeiten.

Ich hoffe, dieser Artikel kann Ihnen helfen, das Nutzungsszenario von RowCount () klarer zu verstehen und zu vermeiden, Fallen zu platzieren, wenn die Anzahl der Zeilen in Gewerkschaftsabfrageergebnissen zählt. Diese Tipps sind besonders wichtig, wenn Sie eine API- oder Datenanalyseplattform (z. B. in einem Projekt auf Gitbox.net ) erstellen.

Müssen Sie die Paging -Wrapper -Funktion auch für Sie schreiben?