Signatur
Beschreibung
mysqli_stmt_param_count() liefert die Anzahl der Fragezeichen-Platzhalter (?), die in einem mit mysqli_prepare() vorbereiteten SQL-Statement vorhanden sind. Der Wert entspricht genau der Anzahl der Argumente, die anschließend an mysqli_stmt_bind_param() übergeben werden müssen.
Die Funktion ist vor allem dann nützlich, wenn SQL-Statements dynamisch zusammengebaut werden und der Code sicherstellen soll, dass die korrekte Anzahl an Parametern gebunden wird, bevor das Statement ausgeführt wird. Dies ermöglicht eine robuste Validierung und verhindert Laufzeitfehler durch falsch gebundene Parameter.
In der objektorientierten Schreibweise steht dasselbe Ergebnis über die Eigenschaft mysqli_stmt::$param_count zur Verfügung. Beide Varianten sind funktional identisch und können je nach Programmierstil frei gewählt werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $statement Pflicht | mysqli_stmt | Ein gültiges mysqli_stmt-Objekt, das mit mysqli_prepare() bzw. mysqli_stmt_prepare() erzeugt wurde. |
Rückgabewert
?) im vorbereiteten Statement als nicht-negative ganze Zahl zurück. Enthält das Statement keine Parameter, wird 0 zurückgegeben.Beispiele
Anzahl der Parameter vor dem Binden prüfen
<?php
$mysqli = new mysqli('localhost', 'user', 'password', 'testdb');
$sql = 'SELECT * FROM users WHERE age > ? AND city = ?';
$stmt = $mysqli->prepare($sql);
// Prozeduraler Stil
$paramCount = mysqli_stmt_param_count($stmt);
echo 'Anzahl Parameter: ' . $paramCount; // 2
$stmt->close();
$mysqli->close();
Dynamische Bindung basierend auf der Parameteranzahl
<?php
$mysqli = new mysqli('localhost', 'user', 'password', 'testdb');
$filters = ['Berlin', 25];
$sql = 'SELECT name FROM users WHERE city = ? AND age > ?';
$stmt = $mysqli->prepare($sql);
if (mysqli_stmt_param_count($stmt) !== count($filters)) {
throw new RuntimeException('Parameteranzahl stimmt nicht mit den Werten überein.');
}
// Werte binden und Statement ausführen
$stmt->bind_param('si', $filters[0], $filters[1]);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
echo $row['name'] . PHP_EOL;
}
$stmt->close();
$mysqli->close();
// Wichtig · Fallstricke
OOP-Äquivalent: In der objektorientierten Schreibweise kann statt der Funktion die Eigenschaft $stmt->param_count verwendet werden, die denselben Wert liefert.
Prepared Statements und Sicherheit: Durch den Einsatz von Prepared Statements mit Platzhaltern (?) werden SQL-Injection-Angriffe wirkungsvoll verhindert, da Benutzerdaten niemals direkt in den SQL-String eingebettet werden. mysqli_stmt_param_count() hilft dabei, die korrekte Anzahl der Platzhalter programmatisch zu prüfen, bevor Daten gebunden werden.