Start · Sprachen · PHP · Referenz · db2_field_precision

db2_field_precision

Funktion

Gibt die Genauigkeit (Precision) einer Spalte im Ergebnissatz einer IBM DB2-Abfrage zurück.

seit PHP 5.1.0 Kategorie: db

Signatur

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

Beschreibung

db2_field_precision() ermittelt die Genauigkeit einer bestimmten Spalte im Ergebnissatz eines ausgeführten Statements. Die Genauigkeit beschreibt die maximale Gesamtanzahl an signifikanten Stellen, die ein numerischer Wert in dieser Spalte haben kann – also die Gesamtanzahl der Ziffern (vor und nach dem Dezimalpunkt).

Diese Funktion ist besonders nützlich, wenn dynamisch mit Datenbankschemas gearbeitet wird, z. B. beim Aufbau generischer Datenbankabstraktionsschichten oder beim Exportieren von Daten in Formate, die Metainformationen über Spalten benötigen.

Die Spalte kann entweder über ihren nullbasierten Index (als int) oder über ihren Namen (als string) referenziert werden. Das Statement muss zuvor erfolgreich mit db2_exec() oder db2_execute() ausgeführt worden sein.

Für nicht-numerische Spaltentypen wie CHAR oder VARCHAR gibt die Funktion üblicherweise die maximale Zeichenlänge zurück, was dem Verhalten von db2_field_width() ähnelt.

Parameter

Name Typ Default Beschreibung
$stmt Pflicht resource Ein gültiges Statement-Handle, das durch db2_exec() oder db2_execute() erzeugt wurde.
$column Pflicht int|string Die Spalte, deren Genauigkeit ermittelt werden soll. Entweder als nullbasierter Integer-Index oder als Spaltenname (String).

Rückgabewert

Typ
int|false
Beschreibung
Gibt die Genauigkeit der Spalte als int zurück. Falls das Statement-Handle ungültig ist oder die angegebene Spalte nicht existiert, wird false zurückgegeben.

Beispiele

Genauigkeit einer numerischen Spalte abfragen

<?php
$conn = db2_connect('SAMPLE', 'db2user', 'secret');

if ($conn) {
    $sql = 'SELECT id, price, name FROM products';
    $stmt = db2_exec($conn, $sql);

    if ($stmt) {
        // Genauigkeit der Spalte 'price' (Index 1) ermitteln
        $precision = db2_field_precision($stmt, 1);
        echo 'Genauigkeit von price: ' . $precision . PHP_EOL;

        // Alternativ per Spaltenname
        $precisionByName = db2_field_precision($stmt, 'price');
        echo 'Genauigkeit von price (per Name): ' . $precisionByName . PHP_EOL;
    }

    db2_close($conn);
}
Genauigkeit von price: 10 Genauigkeit von price (per Name): 10

Metadaten aller Spalten eines Ergebnissatzes ausgeben

<?php
$conn = db2_connect('SAMPLE', 'db2user', 'secret');

if ($conn) {
    $sql = 'SELECT id, price, name FROM products';
    $stmt = db2_exec($conn, $sql);

    if ($stmt) {
        $numCols = db2_num_fields($stmt);
        for ($i = 0; $i < $numCols; $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: %-10s | Typ: %-10s | Precision: %d | Scale: %d\n",
                $name, $type, $precision, $scale
            );
        }
    }

    db2_close($conn);
}
Spalte: id | Typ: integer | Precision: 10 | Scale: 0 Spalte: price | Typ: decimal | Precision: 10 | Scale: 2 Spalte: name | Typ: varchar | Precision: 100 | Scale: 0

// Wichtig · Fallstricke

Hinweis: Die Funktion steht nur zur Verfügung, wenn die IBM DB2-Erweiterung (ibm_db2) installiert und aktiviert ist. Sie ist nicht Teil der Standard-PHP-Distribution.

Spaltenindizes sind nullbasiert – die erste Spalte hat den Index 0. Ein häufiger Fehler ist die Verwendung von 1 als erstem Index, was zu false oder falschen Ergebnissen führt.

Bei String-Spalten wie CHAR oder VARCHAR entspricht der zurückgegebene Wert der maximalen Länge der Spalte, nicht einer numerischen Genauigkeit im engeren Sinne. Für rein numerische Anwendungsfälle sollte der Typ der Spalte vorher mit db2_field_type() geprüft werden.