Start · Sprachen · PHP · Referenz · mysqli_stmt_attr_get

mysqli_stmt_attr_get

Funktion

Liefert den aktuellen Wert eines Attributs eines vorbereiteten <code>mysqli_stmt</code>-Statements.

seit PHP 5.0.0 Kategorie: db

Signatur

mysqli_stmt_attr_get(mysqli_stmt $statement, int $attribute): int

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:
  • MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH – Steuert die Berechnung der maximalen Feldlänge in den Metadaten.
  • MYSQLI_STMT_ATTR_CURSOR_TYPE – Typ des Cursors für das Statement (z. B. MYSQLI_CURSOR_TYPE_NO_CURSOR oder MYSQLI_CURSOR_TYPE_READ_ONLY).
  • MYSQLI_STMT_ATTR_PREFETCH_ROWS – Anzahl der vorzuladenden Zeilen bei Cursor-Verwendung.

Rückgabewert

Typ
int
Beschreibung
Gibt den aktuellen Wert des angeforderten Attributs als 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();
Cursor-Typ (Standard): 0 Cursor-Typ (nach Setzen): 1

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();
UpdateMaxLength (Standard): 0 UpdateMaxLength (nach Setzen): 1

// 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.