Signatur
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
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);
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);
// 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.