Signatur
Beschreibung
mysqli_stmt_attr_get() gibt den aktuellen Wert eines bestimmten Attributs eines vorbereiteten Statements zurück. Attribute steuern das Verhalten eines Statements, beispielsweise ob ein Cursor für die Ergebnismenge verwendet werden soll.
Das Gegenstück mysqli_stmt_attr_set() setzt ein Attribut; mysqli_stmt_attr_get() liest den bisher gesetzten oder den Standardwert. Dies ist nützlich, um den aktuellen Zustand eines Statements zu prüfen, bevor man es ausführt oder ein Verhalten bedingt ändert.
Der häufigste Anwendungsfall ist die Abfrage des Attributs MYSQLI_STMT_ATTR_CURSOR_TYPE, das angibt, ob für das Statement ein serverseitiger Cursor geöffnet wird. Ein serverseitiger Cursor kann bei großen Ergebnismengen Speicher sparen, weil die Zeilen zeilenweise abgerufen werden können.
Das Attribut MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH bestimmt, ob mysqli_stmt_store_result() die maximale Länge eines Feldes in der max_length-Eigenschaft der Metadaten berechnet. MYSQLI_STMT_ATTR_PREFETCH_ROWS legt fest, wie viele Zeilen bei Verwendung eines Cursors auf einmal vom Server vorgeladen werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $statement Pflicht | mysqli_stmt | Das mysqli_stmt-Objekt, das durch mysqli_prepare() oder mysqli_stmt_init() erstellt wurde. |
|
| $attribute Pflicht | int | Die Konstante des abzufragenden Attributs. Mögliche Werte sind:
|
Rückgabewert
int zurück. Bei einem ungültigen Attribut wird false zurückgegeben.Beispiele
Cursor-Typ eines Statements abfragen
<?php
$mysqli = new mysqli('localhost', 'benutzer', 'passwort', 'testdb');
if ($mysqli->connect_errno) {
die('Verbindung fehlgeschlagen: ' . $mysqli->connect_error);
}
$stmt = $mysqli->prepare('SELECT id, name FROM benutzer');
// Cursor-Typ abfragen (Standard: kein Cursor)
$cursorType = mysqli_stmt_attr_get($stmt, MYSQLI_STMT_ATTR_CURSOR_TYPE);
echo 'Cursor-Typ (Standard): ' . $cursorType . PHP_EOL;
// Ausgabe: 0 (entspricht MYSQLI_CURSOR_TYPE_NO_CURSOR)
// Cursor auf Read-Only setzen
mysqli_stmt_attr_set($stmt, MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_READ_ONLY);
$cursorType = mysqli_stmt_attr_get($stmt, MYSQLI_STMT_ATTR_CURSOR_TYPE);
echo 'Cursor-Typ (nach Setzen): ' . $cursorType . PHP_EOL;
// Ausgabe: 1 (entspricht MYSQLI_CURSOR_TYPE_READ_ONLY)
$stmt->close();
$mysqli->close();
Update-Max-Length-Attribut prüfen
<?php
$mysqli = new mysqli('localhost', 'benutzer', 'passwort', 'testdb');
if ($mysqli->connect_errno) {
die('Verbindung fehlgeschlagen: ' . $mysqli->connect_error);
}
$stmt = $mysqli->prepare('SELECT beschreibung FROM produkte');
// Standardwert von MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH abfragen
$updateMaxLength = mysqli_stmt_attr_get($stmt, MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH);
echo 'UpdateMaxLength (Standard): ' . $updateMaxLength . PHP_EOL;
// Ausgabe: 0 (deaktiviert)
// Aktivieren, damit max_length in den Metadaten korrekt befüllt wird
mysqli_stmt_attr_set($stmt, MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH, 1);
$updateMaxLength = mysqli_stmt_attr_get($stmt, MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH);
echo 'UpdateMaxLength (nach Setzen): ' . $updateMaxLength . PHP_EOL;
// Ausgabe: 1 (aktiviert)
$stmt->close();
$mysqli->close();
// Wichtig · Fallstricke
Hinweis zur OOP-Schreibweise: Im objektorientierten Stil steht die Methode $stmt->attr_get(int $attribute) zur Verfügung und liefert dasselbe Ergebnis.
Kompatibilität: Die Unterstützung für serverseitige Cursor (MYSQLI_CURSOR_TYPE_READ_ONLY) hängt vom MySQL-Server und der verwendeten MySQL-Client-Bibliothek ab. Ältere Versionen könnten dieses Feature nicht vollständig unterstützen.
Rückgabe bei ungültigem Attribut: Wird ein nicht existierendes Attribut übergeben, gibt die Funktion false zurück. Es empfiehlt sich, den Rückgabewert mit === false zu prüfen, da ein Attributwert von 0 bei einer losen Typprüfung ebenfalls als falsch gewertet werden würde.