Start · Sprachen · PHP · Referenz · db2_field_scale

db2_field_scale

Funktion

Gibt die Anzahl der Nachkommastellen (Skalierung) einer Spalte in einem IBM DB2-Abfrageergebnis zurück.

seit PHP 5.1.0 Kategorie: db

Signatur

db2_field_scale(resource $stmt, int|string $column): int|false

Beschreibung

db2_field_scale() liefert die Skalierung (Scale) einer bestimmten Spalte in einem Ergebnis-Set, das durch eine vorbereitete oder ausgeführte DB2-Abfrage erzeugt wurde. Die Skalierung gibt an, wie viele Dezimalstellen nach dem Komma ein numerischer Datentyp wie DECIMAL oder NUMERIC enthält.

Diese Funktion ist nützlich, wenn man dynamisch mit Datenbankmetadaten arbeitet und das genaue Format eines numerischen Feldes kennen muss – etwa für korrekte Rundungen, Formatierungen oder Validierungen in der Anwendung, ohne die Tabellendefinition vorher zu kennen.

Die Spalte kann entweder über ihren nullbasierten Integer-Index oder über ihren Namen (als String) identifiziert werden. Bei Spalten, die keinen numerischen Datentyp mit definierter Skalierung haben (z. B. VARCHAR), wird 0 zurückgegeben.

Die Funktion gehört zur IBM DB2-Extension für PHP (ibm_db2) und ist speziell für die Arbeit mit DB2-Datenbanken gedacht. Sie ergänzt andere Metadaten-Funktionen wie db2_field_precision() und db2_field_type().

Parameter

Name Typ Default Beschreibung
$stmt Pflicht resource Ein gültiges Statement-Handle, das durch db2_exec(), db2_execute() oder db2_prepare() erzeugt wurde.
$column Pflicht int|string Der nullbasierte Index der Spalte als Integer oder der Name der Spalte als String. Bei einem Integer-Index beginnt die Zählung bei 0.

Rückgabewert

Typ
int|false
Beschreibung
Gibt die Skalierung der Spalte als Integer zurück. Für nicht-numerische Spalten wird 0 zurückgegeben. Falls das Statement-Handle ungültig ist oder die angegebene Spalte nicht existiert, wird false zurückgegeben.

Beispiele

Skalierung einer DECIMAL-Spalte ermitteln

<?php
$conn = db2_connect('DATABASE', 'USER', 'PASSWORD');

if ($conn) {
    $sql = 'SELECT preis, bezeichnung FROM produkte';
    $stmt = db2_exec($conn, $sql);

    if ($stmt) {
        // Skalierung über Spaltenindex (0-basiert)
        $scale_preis = db2_field_scale($stmt, 0);
        echo "Skalierung von 'preis' (Index 0): " . $scale_preis . PHP_EOL;

        // Skalierung über Spaltenname
        $scale_bezeichnung = db2_field_scale($stmt, 'bezeichnung');
        echo "Skalierung von 'bezeichnung': " . $scale_bezeichnung . PHP_EOL;
    }

    db2_close($conn);
}
Skalierung von 'preis' (Index 0): 2 Skalierung von 'bezeichnung': 0

Alle Spaltenmetadaten einer Abfrage ausgeben

<?php
$conn = db2_connect('DATABASE', 'USER', 'PASSWORD');

if ($conn) {
    $sql = 'SELECT artikel_nr, preis, mwst_satz FROM artikel';
    $stmt = db2_exec($conn, $sql);

    if ($stmt) {
        $num_cols = db2_num_fields($stmt);

        for ($i = 0; $i < $num_cols; $i++) {
            $name      = db2_field_name($stmt, $i);
            $type      = db2_field_type($stmt, $i);
            $precision = db2_field_precision($stmt, $i);
            $scale     = db2_field_scale($stmt, $i);

            echo sprintf(
                "Spalte %d: %-15s Typ: %-10s Precision: %d  Scale: %d\n",
                $i, $name, $type, $precision, $scale
            );
        }
    }

    db2_close($conn);
}
Spalte 0: artikel_nr Typ: integer Precision: 10 Scale: 0 Spalte 1: preis Typ: decimal Precision: 10 Scale: 2 Spalte 2: mwst_satz Typ: decimal Precision: 5 Scale: 4

// Wichtig · Fallstricke

Hinweis zur Verfügbarkeit: Diese Funktion ist nur verfügbar, wenn die PHP-Extension ibm_db2 installiert und aktiviert ist. Sie funktioniert nicht mit anderen Datenbanktreibern wie PDO oder mysqli.

Rückgabe 0 vs. false: Ein Rückgabewert von 0 bedeutet nicht zwingend einen Fehler – er kann auch bedeuten, dass die Spalte keinen skalierten Typ besitzt. Nur false signalisiert einen tatsächlichen Fehler (ungültiges Handle oder nicht vorhandene Spalte). Es empfiehlt sich daher, mit === false zu prüfen.

Nach db2_prepare(): Die Metadaten der Ergebnisspalten sind bereits nach dem Vorbereiten (db2_prepare()) verfügbar, ohne dass db2_execute() aufgerufen werden muss.