PHP Dokumentation: Function oci-connect
12. Januar 2010 von werner
oci_connect
(PHP 5, PECL OCI8 >= 1.1.0)
oci_connect — Connect to an Oracle database
Beschreibung
Returns a connection identifier needed for most other OCI8 operations.
See Connection Handling for general information on connection management and connection pooling.
From PHP 5.1.2 (PECL OCI8 1.1) oci_close() can be used to close the connection.
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.
Parameter-Liste
- username
The Oracle user name.
- password
The password for username.
- connection_string
Containsthe Oracle instance to connect to. It can bean » Easy Connectstring, or a Connect Name fromthe tnsnames.ora file, or the name of a localOracle instance.
If not specified, PHP usesenvironment variables such as TWO_TASK (on Linux)or LOCAL (on Windows)and ORACLE_SID to determine theOracle instance to connect to.
To use the Easy Connect naming method, PHP must be linked with Oracle10g or greater Client libraries. The Easy Connect string for Oracle10g is of the form:[//]host_name[:port][/service_name]. With Oracle11g, the syntax is:[//]host_name[:port][/service_name][:server_type][/instance_name].Service names can be found by running the Oracleutility lsnrctl status on the database servermachine.
The tnsnames.ora file can be in the Oracle Netsearch path, whichincludes $ORACLE_HOME/network/adminand /etc. Alternativelyset TNS_ADMIN sothat $TNS_ADMIN/tnsnames.ora is read. Make surethe web daemon has read access to the file.
- character_set
Wenn Sie den Oracle-Server in der Version 9.2 oderhöher benutzen, können Sie den Zeichensatz, der für eine neue Verbindunggenutzt werden soll, mit dem charset-Parameter angeben.Verwenden Sie Oracle in einer Version < 9.2, wird dieser Parameter ignoriertund stattdessen die Umgebungsvariable NLS_LANG benutzt.
- session_mode
This parameter is available since version PHP 5 (PECL OCI8 1.1) and accepts thefollowing values: OCI_DEFAULT,OCI_SYSOPER and OCI_SYSDBA.If either OCI_SYSOPER orOCI_SYSDBA were specified, this function will tryto establish privileged connection using external credentials. Privileged connections are disabled by default. To enable them youneed to set oci8.privileged_connectto On.
PHP 5.3 (PECL OCI8 1.3.4) introduced theOCI_CRED_EXT mode value. This tells Oracle to useExternal or OS authentication, which must be configured in thedatabase. The OCI_CRED_EXT flag can only be usedwith username of "/" and a empty password.oci8.privileged_connectmay be On or Off.
OCI_CRED_EXT may be combined with theOCI_SYSOPER orOCI_SYSDBA modes.
OCI_CRED_EXT is not supported on Windows forsecurity reasons.
Rückgabewerte
Returns a connection identifier or FALSE on error.
Beispiele
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 c2select_data('c1', $c1); // Results of both inserts are returned
select_data('c2', $c2); // Results of both inserts are returnedrollback('c1', $c1); // Rollback using c1select_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?>Anmerkungen
Hinweis: An incorrectly installed or configured OCI8 extension will often manifest itself as a connection problem or error. See Installing/Configuring for troubleshooting information.
Hinweis: In PHP versions before 5.0.0 use ocilogon() instead. The old function name can still be usedin current versions, however it is deprecated and not recommended.
Siehe auch
- oci_pconnect() – Connect to an Oracle database using a persistent connection
- oci_new_connect() – Connect to the Oracle server using a unique connection
- oci_close() – Schließt eine Oracle-Verbindung