Start · Sprachen · PHP · Referenz · mysqli_stmt_param_count

mysqli_stmt_param_count

Funktion

Gibt die Anzahl der Parameter-Platzhalter (<code>?</code>) in einem vorbereiteten <code>mysqli_stmt</code>-Statement zurück.

seit PHP 5.0.0 Kategorie: db

Signatur

mysqli_stmt_param_count(mysqli_stmt $statement): int

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

Typ
int
Beschreibung
Gibt die Anzahl der Parameter-Platzhalter (?) 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();
Anzahl Parameter: 2

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.