Signatur
Beschreibung
oci_set_client_info überträgt einen frei wählbaren Informationsstring an die Oracle-Datenbank, der der aktuellen Verbindungssitzung zugeordnet wird. Dieser String wird in der Datenbank-View V$SESSION in der Spalte CLIENT_INFO gespeichert und steht damit für Monitoring, Auditing und Performance-Analysen zur Verfügung.
Die Funktion ist besonders nützlich in Anwendungen, bei denen mehrere PHP-Prozesse oder ein Connection-Pool dieselben Datenbankverbindungen teilen. Durch das Setzen von Client-Informationen können Datenbankadministratoren nachvollziehen, welcher Teil der Anwendung eine bestimmte Abfrage ausgelöst hat – beispielsweise der Benutzername der Web-Anwendung oder ein Modul-/Funktionsname.
Der Wert wird erst beim nächsten Roundtrip zur Datenbank (z. B. beim Ausführen einer SQL-Anfrage) tatsächlich übertragen. Es handelt sich um Metadaten-Information, die ausschließlich für Beobachtungs- und Diagnosezwecke gedacht ist und keinen Einfluss auf die Ausführung von SQL-Befehlen hat.
Der übergebene String darf maximal 64 Byte lang sein; längere Strings werden von Oracle stillschweigend abgeschnitten. Die Funktion ergänzt die Schwester-Funktionen oci_set_client_identifier, oci_set_module_name und oci_set_action, die zusammen ein vollständiges End-to-End-Tracing in Oracle ermöglichen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $connection Pflicht | resource | Eine gültige Oracle-Verbindungsressource, die mit oci_connect, oci_pconnect oder oci_new_connect erstellt wurde. |
|
| $client_info Pflicht | string | Ein frei wählbarer Informationsstring (max. 64 Byte), der der Datenbankverbindung zugeordnet wird. Typischerweise werden hier Informationen wie Anwendungsmodul, Benutzername oder Anfrage-ID übergeben. |
Rückgabewert
true bei Erfolg zurück, false bei einem Fehler (z. B. ungültige Verbindungsressource).Beispiele
Client-Information für eine Oracle-Verbindung setzen
<?php
$conn = oci_connect('hr', 'welcome', 'localhost/XE');
if (!$conn) {
$e = oci_error();
trigger_error(htmlspecialchars($e['message']), E_USER_ERROR);
}
// Client-Information setzen (z. B. aktueller PHP-Skriptname)
$clientInfo = 'Modul: Bestellverwaltung; User: ' . ($_SERVER['REMOTE_USER'] ?? 'anonym');
oci_set_client_info($conn, $clientInfo);
// SQL ausführen – erst hier wird die Info zur DB übertragen
$stid = oci_parse($conn, 'SELECT * FROM employees WHERE ROWNUM <= 3');
oci_execute($stid);
while ($row = oci_fetch_assoc($stid)) {
echo $row['LAST_NAME'] . "\n";
}
oci_free_statement($stid);
oci_close($conn);
?>
Client-Information in V$SESSION abfragen
<?php
$conn = oci_connect('hr', 'welcome', 'localhost/XE');
if (!$conn) {
$e = oci_error();
trigger_error(htmlspecialchars($e['message']), E_USER_ERROR);
}
// Client-Information setzen
oci_set_client_info($conn, 'PHP-App v2.5 / Checkout-Prozess');
// Dummy-Query, damit die Info übertragen wird
$stid = oci_parse($conn, 'SELECT 1 FROM DUAL');
oci_execute($stid);
oci_free_statement($stid);
// Nun die gespeicherte CLIENT_INFO aus V$SESSION abfragen (als DBA-User)
$stid2 = oci_parse($conn, "SELECT CLIENT_INFO FROM V\$SESSION WHERE AUDSID = USERENV('SESSIONID')");
oci_execute($stid2);
$row = oci_fetch_assoc($stid2);
echo 'CLIENT_INFO in V$SESSION: ' . $row['CLIENT_INFO'] . "\n";
oci_free_statement($stid2);
oci_close($conn);
?>
// Wichtig · Fallstricke
Längenbegrenzung: Oracle erlaubt maximal 64 Byte für CLIENT_INFO. Längere Strings werden serverseitig ohne Fehlermeldung abgeschnitten. Multibyte-Zeichen (UTF-8) können daher die effektiv sichtbare Zeichenanzahl reduzieren.
Übertragungszeitpunkt: Die Information wird nicht sofort gesetzt, sondern erst beim nächsten Datenbankroundtrip (z. B. oci_execute) an Oracle übertragen. Ein reines oci_set_client_info ohne nachfolgende Datenbankoperation hat keinen sichtbaren Effekt.
Sicherheit: Da diese Daten im Klartext in der Oracle-Systemview V$SESSION erscheinen, sollten keine sensiblen Daten (Passwörter, Tokens) übergeben werden.