Signatur
Beschreibung
ocinlogon ist ein veralteter Alias für die Funktion oci_new_connect und verhält sich identisch zu ihr. Im Gegensatz zu oci_connect oder oci_pconnect erzeugt diese Funktion stets eine neue, dedizierte Verbindung zur Oracle-Datenbank, auch wenn für denselben Benutzer bereits eine Verbindung besteht.
Dies ist besonders nützlich, wenn innerhalb einer PHP-Anwendung zwei unabhängige Transaktionen gleichzeitig geöffnet sein sollen, da jede Verbindung ihren eigenen Transaktionskontext besitzt. Ein COMMIT oder ROLLBACK auf der einen Verbindung hat keinerlei Einfluss auf die andere.
Achtung: Da ocinlogon ein veralteter Alias ist, sollte in modernem PHP-Code stattdessen oci_new_connect verwendet werden. Die Verwendung von Aliasen erschwert die Lesbarkeit und Wartbarkeit des Codes.
Die Verbindung wird am Ende des Skripts automatisch geschlossen, sofern sie nicht vorher explizit mit oci_close freigegeben wird. Da jede Verbindung Datenbankressourcen belegt, sollte sie so früh wie möglich geschlossen werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $username Pflicht | string | Oracle-Benutzername für die Verbindung. | |
| $password Pflicht | string | Passwort des Oracle-Benutzers. | |
| $connection_string | string | Oracle-Verbindungsstring (z. B. aus tnsnames.ora) oder ein Easy Connect-String wie localhost/XE. Wird dieser leer gelassen, verwendet PHP die Umgebungsvariable ORACLE_SID. |
|
| $encoding | string | Zeichensatz, den der Oracle-Client für die Verbindung verwenden soll, z. B. AL32UTF8. Wird kein Wert übergeben, wird der Zeichensatz aus der Umgebungsvariable NLS_LANG ermittelt. |
|
| $session_mode | int | OCI_DEFAULT | Verbindungsmodus. Mögliche Werte sind OCI_DEFAULT, OCI_SYSOPER und OCI_SYSDBA. Letztere erfordern besondere Oracle-Berechtigungen. |
Rückgabewert
false zurückgegeben.Beispiele
Neue exklusive Oracle-Verbindung herstellen
<?php
// Veraltet: ocinlogon verwenden (Alias für oci_new_connect)
$conn = ocinlogon('hr', 'geheimesPasswort', 'localhost/XE', 'AL32UTF8');
if (!$conn) {
$err = ocierror();
trigger_error('Verbindung fehlgeschlagen: ' . $err['message'], E_USER_ERROR);
}
$stid = ociparse($conn, 'SELECT first_name FROM employees WHERE rownum <= 3');
ociexecute($stid);
while ($row = ocifetcharray($stid, OCI_ASSOC)) {
echo $row['FIRST_NAME'] . PHP_EOL;
}
ocilogoff($conn);
Zwei unabhängige Transaktionen mit je einer eigenen Verbindung
<?php
// Bevorzugt: oci_new_connect statt ocinlogon
$conn1 = oci_connect('hr', 'geheimesPasswort', 'localhost/XE');
$conn2 = ocinlogon('hr', 'geheimesPasswort', 'localhost/XE'); // neue, separate Verbindung
// Transaktion 1 auf $conn1
$stid1 = oci_parse($conn1, "UPDATE employees SET salary = salary * 1.1 WHERE department_id = 10");
oci_execute($stid1, OCI_NO_AUTO_COMMIT);
// Transaktion 2 auf $conn2 — unabhängig von $conn1
$stid2 = oci_parse($conn2, "UPDATE employees SET salary = salary * 1.05 WHERE department_id = 20");
oci_execute($stid2, OCI_NO_AUTO_COMMIT);
// Nur Transaktion 1 bestätigen
oci_commit($conn1);
// Transaktion 2 zurückrollen
oci_rollback($conn2);
oci_close($conn1);
oci_close($conn2);
echo 'Transaktionen abgeschlossen.';
// Wichtig · Fallstricke
Deprecation-Hinweis: ocinlogon ist ein veralteter Alias und sollte nicht mehr in neuem Code verwendet werden. Die empfohlene Funktion ist oci_new_connect. Alte Aliasnamen ohne Unterstrich (wie ocinlogon, ocilogoff, ociparse etc.) gelten seit PHP 5.4 als veraltet.
Ressourcenverbrauch: Da ocinlogon/oci_new_connect niemals eine gecachte oder persistente Verbindung zurückgibt, verbraucht jeder Aufruf eine neue Oracle-Session. In Umgebungen mit vielen gleichzeitigen Anfragen kann dies schnell zum Erschöpfen der Oracle-Verbindungslimits führen. Den Einsatz deshalb auf Szenarien beschränken, in denen wirklich ein separater Transaktionskontext benötigt wird.
Sicherheit: Zugangsdaten (username, password) sollten niemals im Quellcode hartcodiert werden. Stattdessen Umgebungsvariablen oder einen sicheren Konfigurationsspeicher verwenden.