Signatur
Beschreibung
mysqli_stmt_field_count() liefert die Anzahl der Spalten im Ergebnissatz eines vorbereiteten Statements. Die Funktion ist besonders nützlich, um vor dem Binden von Ergebnisvariablen zu prüfen, ob ein Statement überhaupt Spalten zurückliefert – also ob es sich um ein SELECT-Statement handelt oder um ein nicht-ergebnisorientiertes Statement wie INSERT, UPDATE oder DELETE.
Gibt die Funktion den Wert 0 zurück, produziert das Statement kein Ergebnisset (z. B. bei DML-Anweisungen). Bei einem SELECT * über eine Tabelle mit fünf Spalten wäre der Rückgabewert entsprechend 5.
In der objektorientierten Schreibweise steht die äquivalente Eigenschaft mysqli_stmt::$field_count zur Verfügung. Die prozedurale Variante mysqli_stmt_field_count() ist das direkte Gegenstück dazu und wird über das mysqli_stmt-Objekt aufgerufen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $statement Pflicht | mysqli_stmt | Ein von mysqli_prepare() oder mysqli_stmt_init() erzeugtes vorbereitetes Statement-Objekt. |
Rückgabewert
0, liefert das Statement kein Ergebnisset (z. B. bei INSERT-, UPDATE- oder DELETE-Statements).Beispiele
Unterscheidung zwischen SELECT und DML mit field_count
<?php
$mysqli = new mysqli('localhost', 'user', 'password', 'testdb');
// SELECT-Statement – liefert Spalten
$stmt = $mysqli->prepare('SELECT id, name, email FROM users WHERE id = ?');
$fieldCount = mysqli_stmt_field_count($stmt);
echo "Spaltenanzahl (SELECT): " . $fieldCount . PHP_EOL; // 3
$stmt->close();
// INSERT-Statement – liefert keine Spalten
$stmt2 = $mysqli->prepare('INSERT INTO users (name, email) VALUES (?, ?)');
$fieldCount2 = mysqli_stmt_field_count($stmt2);
echo "Spaltenanzahl (INSERT): " . $fieldCount2 . PHP_EOL; // 0
$stmt2->close();
$mysqli->close();
Dynamisches Binden von Ergebnisvariablen basierend auf field_count
<?php
$mysqli = new mysqli('localhost', 'user', 'password', 'testdb');
$stmt = $mysqli->prepare('SELECT id, name FROM users LIMIT 3');
$stmt->execute();
if (mysqli_stmt_field_count($stmt) > 0) {
// Ergebnissatz vorhanden – Metadaten abrufen
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
echo $row['id'] . ' - ' . $row['name'] . PHP_EOL;
}
$result->free();
} else {
echo "Das Statement liefert kein Ergebnisset." . PHP_EOL;
}
$stmt->close();
$mysqli->close();
// Wichtig · Fallstricke
Die Funktion liefert die Spaltenanzahl bereits nach dem Aufruf von mysqli_prepare(), also noch bevor mysqli_stmt_execute() aufgerufen wird. Sie kann daher zur frühen Validierung des Statement-Typs verwendet werden.
In der OOP-Schreibweise kann statt der Funktion auch die Eigenschaft $stmt->field_count direkt genutzt werden – beide liefern identische Werte.