Start · Sprachen · PHP · Referenz · mysqli_field_count

mysqli_field_count

Funktion

Gibt die Anzahl der Spalten (Felder) zurück, die die letzte auf der Datenbankverbindung ausgeführte Abfrage erzeugt hat.

seit PHP 5.0.0 Kategorie: db

Signatur

mysqli_field_count(mysqli $mysql): int

Beschreibung

mysqli_field_count() liefert die Anzahl der Spalten, die das Ergebnis der zuletzt auf der angegebenen mysqli-Verbindung ausgeführten Abfrage enthält. Die Funktion ist besonders nützlich, wenn man nach einer Abfrage prüfen möchte, ob ein Resultset vorhanden ist, ohne die eigentliche Ergebnismenge abzurufen.

Typischerweise wird mysqli_field_count() eingesetzt, um zwischen DML-Anweisungen (z. B. INSERT, UPDATE, DELETE) und SELECT-Anweisungen zu unterscheiden: DML-Statements liefern 0 Spalten, während ein SELECT mit Ergebnissen immer mindestens eine Spalte zurückgibt. Dies ist besonders bei Multi-Statement-Abfragen mit mysqli_multi_query() relevant, um zu entscheiden, ob mysqli_store_result() aufgerufen werden soll.

Die Funktion entspricht dem objektorientierten Zugriff über die Eigenschaft $mysqli->field_count. Sie gibt ausschließlich die Spaltenzahl der letzten ausgeführten Abfrage zurück und wird bei jeder neuen Abfrage überschrieben.

Parameter

Name Typ Default Beschreibung
$mysql Pflicht mysqli Das mysqli-Verbindungsobjekt, das von mysqli_connect() oder mysqli_init() zurückgegeben wurde.

Rückgabewert

Typ
int
Beschreibung
Die Anzahl der Spalten (Felder) der letzten Abfrage als nicht-negative ganze Zahl. Gibt 0 zurück, wenn die letzte Abfrage kein Resultset erzeugt hat (z. B. bei INSERT, UPDATE oder DELETE).

Beispiele

Unterscheidung zwischen SELECT und DML nach einer Abfrage

<?php
$mysqli = mysqli_connect('localhost', 'user', 'secret', 'testdb');

if (!$mysqli) {
    die('Verbindungsfehler: ' . mysqli_connect_error());
}

// SELECT-Abfrage ausführen
mysqli_query($mysqli, 'SELECT id, name, email FROM users');

$fieldCount = mysqli_field_count($mysqli);
echo "Anzahl der Spalten: " . $fieldCount . PHP_EOL;
// Ausgabe: Anzahl der Spalten: 3

// DML-Abfrage ausführen
mysqli_query($mysqli, "UPDATE users SET name = 'Max' WHERE id = 1");

$fieldCount = mysqli_field_count($mysqli);
echo "Anzahl der Spalten nach UPDATE: " . $fieldCount . PHP_EOL;
// Ausgabe: Anzahl der Spalten nach UPDATE: 0

mysqli_close($mysqli);
Anzahl der Spalten: 3 Anzahl der Spalten nach UPDATE: 0

Einsatz bei Multi-Statement-Abfragen mit mysqli_multi_query()

<?php
$mysqli = mysqli_connect('localhost', 'user', 'secret', 'testdb');

if (!$mysqli) {
    die('Verbindungsfehler: ' . mysqli_connect_error());
}

$sql = "SELECT id, name FROM users; INSERT INTO log (msg) VALUES ('test'); SELECT COUNT(*) AS total FROM users";

if (mysqli_multi_query($mysqli, $sql)) {
    do {
        // Nur wenn Spalten vorhanden sind, gibt es ein Resultset
        if (mysqli_field_count($mysqli) > 0) {
            $result = mysqli_store_result($mysqli);
            while ($row = mysqli_fetch_assoc($result)) {
                print_r($row);
            }
            mysqli_free_result($result);
        } else {
            echo "DML-Statement ausgeführt, betroffene Zeilen: " . mysqli_affected_rows($mysqli) . PHP_EOL;
        }
    } while (mysqli_next_result($mysqli));
}

mysqli_close($mysqli);
Array ( [id] => 1 [name] => Max ) DML-Statement ausgeführt, betroffene Zeilen: 1 Array ( [total] => 1 )

// Wichtig · Fallstricke

Wichtig bei mysqli_multi_query(): Das Aufrufen von mysqli_store_result() für ein Statement, das kein Resultset erzeugt (Feldanzahl = 0), erzeugt einen Fehler. Die Kombination von mysqli_field_count() und mysqli_next_result() ist daher ein bewährtes Muster, um Multi-Statement-Ergebnisse sicher zu verarbeiten.

Die Funktion gibt die Feldanzahl der zuletzt ausgeführten Abfrage zurück — nicht eines gespeicherten Resultsets. Wird ein Resultset erst nach weiteren Abfragen abgerufen, kann der Wert bereits überschrieben sein.

Im objektorientierten Stil steht $mysqli->field_count als äquivalente Eigenschaft zur Verfügung.