(PHP 5, PHP 7, PHP 8, PECL OCI8 >= 1.1.0)
oci_connect — Connect to an Oracle database
$username
,$password
,$connection_string
= null
,$encoding
= "",$session_mode
= OCI_DEFAULT
Returns a connection identifier needed for most other OCI8 operations.
For performance, most applications should use persistent connections with oci_pconnect() instead of oci_connect(). See Connection Handling for general information on connection management and connection pooling.
The second and subsequent calls to oci_connect() with the same parameters will return the connection handle returned from the first call. This means that transactions in one handle are also in the other handles, because they use the same underlying database connection. If two handles need to be transactionally isolated from each other, use oci_new_connect() instead.
username
The Oracle user name.
password
The password for username
.
connection_string
Beinhaltet die Oracle-Instanz
, mit der verbunden werden
soll. Dies kann eine » Easy-Connect-Zeichenkette, ein
Connect-Name aus der Datei tnsnames.ora oder der Name
einer lokalen Oracle-Instanz sein.
Wenn dies nicht angegebe wird oder
null
ist, verwendet PHP Umgebungsvariablen wie TWO_TASK
(unter Linux), LOCAL
(unter Windows) oder
ORACLE_SID
um die Oracle-Instanz
zu
ermitteln, mit der verbunden werden soll.
Um die benannte Easy Connect Methode zu verwenden, muss PHP gegen die
Clientbibliotheken von Oracle 10g oder höher gelinkt
sein. Die Easy-Connect-Zeichenkette für Oracle 10g hat
den Aufbau: [//]host_name[:port][/service_name]. Für
Oracle 11g ist die Syntax:
[//]host_name[:port][/service_name][:server_type][/instance_name].
Weitere Optionen wurden mit Oracle 19c eingeführt, darunter die timeout- und
die keep-alive-Einstellungen. Siehe dazu die Oracle-Dokumentation. Die
Servicenamen können ermittelt werden, indem man das Oracle-Hilfswerkzeug
lsnrctl status
auf dem Datenbankserver ausführt.
Die Datei tnsnames.ora kann sich im Oracle Net Suchpfad
befinden, welcher
/der/pfad/zu/instantclient/network/admin,
$ORACLE_HOME/network/admin sowie
/etc beinhaltet. Alternativ kann
TNS_ADMIN
so gesetzt werden, dass
$TNS_ADMIN/tnsnames.ora gelesen wird. Es muss
sichergestellt sein, dass der Webserver eine Leseberechtigung für die Datei
besitzt.
encoding
Bestimmt den Zeichensatz, der von den Oracle Client Bibliotheken verwendet wird. Dieser Zeichensatz muss nicht dem von der Datenbank verwendeten Zeichensatz entsprechen. Wenn diese nicht übereinstimmen, wird Oracle bestmöglich versuchen, die Daten in den Datenbankzeichensatz zu übersetzen. Abhängig von den Zeichensätzen kann dies zu unbrauchbaren Ergebnissen führen. Diese Konvertierung führt auch zu einem erhöhten Zeitbedarf.
Falls nicht angegeben, werden
die Oracle Client Bibliotheken versuchen, den Zeichensatz aus der
Umgebungsvariablen NLS_LANG
auszulesen.
Die Übergabe dieses Parameters verringert die Zeit für den Verbindungsaufbau.
session_mode
Dieser
Parameter ist seit PHP 5 (PECL OCI8 1.1) verfügbar und akzeptiert
die folgenden Werte: OCI_DEFAULT
,
OCI_SYSOPER
und OCI_SYSDBA
.
Falls entweder OCI_SYSOPER
oder
OCI_SYSDBA
angegeben wurden wird diese Funktion
versuchen die priviligierte Verbindung mit externen Credentials aufzubauen.
Um diese einzuschalten muss man
oci8.privileged_connect
auf On
setzen.
PHP 5.3 (PECL OCI8 1.3.4) hat den Wert OCI_CRED_EXT
eingeführt. Dies konfiguriert Oracle dazu eine externe oder
Os-Authentifizierung vorzunehmen, welche in der Datenbank konfiguriert
werden muss. Der Schalter OCI_CRED_EXT
kann nur mit
dem Benutzernamen "/" und einem leeren Passwort verwendet werden.
oci8.privileged_connect
kann entweder On
oder Off
sein.
OCI_CRED_EXT
kann mit
OCI_SYSOPER
oder
OCI_SYSDBA
kombiniert werden.
OCI_CRED_EXT
ist auf Windows-Systemen aus
sicherheitsgründen nicht unterstützt.
Returns a connection identifier or false
on error.
Version | Beschreibung |
---|---|
8.0.0, PECL OCI8 3.0.0 |
connection_string is now nullable.
|
Beispiel #1 Basic oci_connect() using Easy Connect syntax
<?php
// Connects to the XE service (i.e. database) on the "localhost" machine
$conn = oci_connect('hr', 'welcome', 'localhost/XE');
if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
$stid = oci_parse($conn, 'SELECT * FROM employees');
oci_execute($stid);
echo "<table border='1'>\n";
while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
echo "<tr>\n";
foreach ($row as $item) {
echo " <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : " ") . "</td>\n";
}
echo "</tr>\n";
}
echo "</table>\n";
?>
Beispiel #2 Basic oci_connect() using a Network Connect name
<?php
// Connects to the MYDB database described in tnsnames.ora file,
// One example tnsnames.ora entry for MYDB could be:
// MYDB =
// (DESCRIPTION =
// (ADDRESS = (PROTOCOL = TCP)(HOST = mymachine.oracle.com)(PORT = 1521))
// (CONNECT_DATA =
// (SERVER = DEDICATED)
// (SERVICE_NAME = XE)
// )
// )
$conn = oci_connect('hr', 'welcome', 'MYDB');
if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
$stid = oci_parse($conn, 'SELECT * FROM employees');
oci_execute($stid);
echo "<table border='1'>\n";
while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
echo "<tr>\n";
foreach ($row as $item) {
echo " <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : " ") . "</td>\n";
}
echo "</tr>\n";
}
echo "</table>\n";
?>
Beispiel #3 oci_connect() with an explicit character set
<?php
$conn = oci_connect('hr', 'welcome', 'localhost/XE', 'AL32UTF8');
if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
$stid = oci_parse($conn, 'SELECT * FROM employees');
oci_execute($stid);
echo "<table border='1'>\n";
while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
echo "<tr>\n";
foreach ($row as $item) {
echo " <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : " ") . "</td>\n";
}
echo "</tr>\n";
}
echo "</table>\n";
?>
Beispiel #4 Using multiple calls to oci_connect()
<?php
$c1 = oci_connect("hr", "welcome", 'localhost/XE');
$c2 = oci_connect("hr", "welcome", 'localhost/XE');
// Both $c1 and $c2 show the same PHP resource id meaning they use the
// same underlying database connection
echo "c1 is $c1<br>\n";
echo "c2 is $c2<br>\n";
function create_table($conn)
{
$stmt = oci_parse($conn, "create table hallo (test varchar2(64))");
oci_execute($stmt);
echo "Created table<br>\n";
}
function drop_table($conn)
{
$stmt = oci_parse($conn, "drop table hallo");
oci_execute($stmt);
echo "Dropped table<br>\n";
}
function insert_data($connname, $conn)
{
$stmt = oci_parse($conn, "insert into hallo
values(to_char(sysdate,'DD-MON-YY HH24:MI:SS'))");
oci_execute($stmt, OCI_DEFAULT);
echo "$connname inserted row without committing<br>\n";
}
function rollback($connname, $conn)
{
oci_rollback($conn);
echo "$connname rollback<br>\n";
}
function select_data($connname, $conn)
{
$stmt = oci_parse($conn, "select * from hallo");
oci_execute($stmt, OCI_DEFAULT);
echo "$connname ----selecting<br>\n";
while (oci_fetch($stmt)) {
echo " " . oci_result($stmt, "TEST") . "<br>\n";
}
echo "$connname ----done<br>\n";
}
create_table($c1);
insert_data('c1', $c1); // Insert a row using c1
sleep(2); // sleep to show a different timestamp for the 2nd row
insert_data('c2', $c2); // Insert a row using c2
select_data('c1', $c1); // Results of both inserts are returned
select_data('c2', $c2); // Results of both inserts are returned
rollback('c1', $c1); // Rollback using c1
select_data('c1', $c1); // Both inserts have been rolled back
select_data('c2', $c2);
drop_table($c1);
// Closing one of the connections makes the PHP variable unusable, but
// the other could be used
oci_close($c1);
echo "c1 is $c1<br>\n";
echo "c2 is $c2<br>\n";
// Output is:
// c1 is Resource id #5
// c2 is Resource id #5
// Created table
// c1 inserted row without committing
// c2 inserted row without committing
// c1 ----selecting
// 09-DEC-09 12:14:43
// 09-DEC-09 12:14:45
// c1 ----done
// c2 ----selecting
// 09-DEC-09 12:14:43
// 09-DEC-09 12:14:45
// c2 ----done
// c1 rollback
// c1 ----selecting
// c1 ----done
// c2 ----selecting
// c2 ----done
// Dropped table
// c1 is
// c2 is Resource id #5
?>
Hinweis:
An incorrectly installed or configured OCI8 extension will often manifest itself as a connection problem or error. See Installing/Configuring for troubleshooting information.