Start · Sprachen · PHP · Referenz · ibase_param_info

ibase_param_info

Funktion

Gibt Informationen zu einem Parameter einer vorbereiteten InterBase/Firebird-Abfrage zurück.

seit PHP 5.0.0 Kategorie: db

Signatur

ibase_param_info(resource $query, int $param_number): array

Beschreibung

ibase_param_info() liefert ein assoziatives Array mit Metadaten zu einem bestimmten Parameter einer vorbereiteten SQL-Abfrage (erzeugt durch ibase_prepare()). Dies ermöglicht es, Typ, Name und weitere Eigenschaften eines Eingabeparameters zur Laufzeit zu inspizieren.

Die Funktion ist nützlich, wenn SQL-Abfragen dynamisch aufgebaut werden oder wenn ein Programm die Struktur von Prepared Statements zur Laufzeit analysieren und validieren muss – beispielsweise in generischen Datenbankabstraktionsschichten.

Der zurückgegebene Array enthält Einträge wie sqltype, sqlscale, sqlsubtype, sqllen, alias, relation und name, die den SQL-Datentyp und weitere Eigenschaften des Parameters beschreiben. Die Nummerierung der Parameter beginnt bei 0.

Hinweis: Die ibase_*-Funktionen erfordern die interbase-Erweiterung (für Firebird/InterBase). Ab PHP 7.4 wurde diese Erweiterung aus dem PHP-Kern entfernt und steht als PECL-Paket (ibase) zur Verfügung.

Parameter

Name Typ Default Beschreibung
$query Pflicht resource Eine vorbereitete Abfrage-Ressource, wie sie von ibase_prepare() zurückgegeben wird.
$param_number Pflicht int Der nullbasierte Index des Parameters, über den Informationen abgerufen werden sollen. Der erste Parameter hat den Index 0.

Rückgabewert

Typ
array
Beschreibung
Gibt ein assoziatives Array mit Informationen zum Parameter zurück. Die Array-Schlüssel umfassen unter anderem: sqltype (SQL-Datentyp als Integer), sqlscale (Skalierung), sqlsubtype (Subtyp), sqllen (Länge), alias (Alias-Name), relation (Tabellenname) und name (Parametername). Bei einem Fehler wird false zurückgegeben.

Beispiele

Parameterinformationen einer vorbereiteten Abfrage ausgeben

<?php
// Verbindung zur Firebird/InterBase-Datenbank herstellen
$dbh = ibase_connect('/var/db/mydb.fdb', 'sysdba', 'masterkey');

// SQL-Abfrage mit zwei Parametern vorbereiten
$query = ibase_prepare($dbh, 'SELECT * FROM employees WHERE department_id = ? AND salary > ?');

if ($query) {
    // Informationen zum ersten Parameter (Index 0) abrufen
    $paramInfo = ibase_param_info($query, 0);
    echo 'Parameter 0:' . PHP_EOL;
    print_r($paramInfo);

    // Informationen zum zweiten Parameter (Index 1) abrufen
    $paramInfo2 = ibase_param_info($query, 1);
    echo 'Parameter 1:' . PHP_EOL;
    print_r($paramInfo2);

    ibase_free_query($query);
}

ibase_close($dbh);
?>
Parameter 0: Array ( [sqltype] => 496 [sqlscale] => 0 [sqlsubtype] => 0 [sqllen] => 4 [alias] => [relation] => [name] => ) Parameter 1: Array ( [sqltype] => 480 [sqlscale] => 0 [sqlsubtype] => 0 [sqllen] => 8 [alias] => [relation] => [name] => )

Alle Parameter einer vorbereiteten Abfrage iterieren

<?php
$dbh = ibase_connect('/var/db/mydb.fdb', 'sysdba', 'masterkey');

$sql = 'INSERT INTO products (name, price, category_id) VALUES (?, ?, ?)';
$query = ibase_prepare($dbh, $sql);

if ($query) {
    $numParams = 3; // Anzahl der ?-Platzhalter
    for ($i = 0; $i < $numParams; $i++) {
        $info = ibase_param_info($query, $i);
        echo sprintf(
            "Parameter %d: Typ=%d, Länge=%d\n",
            $i,
            $info['sqltype'],
            $info['sqllen']
        );
    }
    ibase_free_query($query);
}

ibase_close($dbh);
?>
Parameter 0: Typ=448, Länge=255 Parameter 1: Typ=480, Länge=8 Parameter 2: Typ=496, Länge=4

// Wichtig · Fallstricke

Deprecation/Verfügbarkeit: Die ibase_*-Funktionsfamilie wurde mit PHP 7.4 aus dem PHP-Kern entfernt. Für PHP 7.4 und neuer muss die PECL-Erweiterung ibase installiert werden. Alternativ steht die fbird_*-Erweiterung als modernerer Ersatz zur Verfügung.

Parameterindex: Der param_number-Parameter ist nullbasiert. Ein ungültiger Index (zu groß oder negativ) führt zu einem Fehler. Die Gesamtanzahl der Parameter kann nicht direkt über eine Funktion abgefragt werden; sie muss aus dem SQL-Statement selbst ermittelt werden.

Typ-Konstanten: Die zurückgegebenen sqltype-Werte entsprechen den internen Firebird/InterBase SQL-Typkonstanten (z. B. 448 für VARCHAR, 480 für DOUBLE PRECISION, 496 für INTEGER).