(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
Містить
примірник Oracle
для з'єднання. Це може бути або » Easy Connect string, або Connect
Name з файлу tnsnames.ora, або назва локального примірника
Oracle.
Якщо не вказано або null
, то PHP
використовує змінні оточення, як от TWO_TASK
(в Linux) або
LOCAL
(у Windows) та ORACLE_SID
, щоб
визначити примірник Oracle
для з'єднання.
Для використання методу називання Easy Connect, PHP має бути скомпоновано з
Oracle 10g або новішими клієнтськими бібліотеками. Easy
Connect string для Oracle 10g має форму
[//]назва_хосту[:порт][/назва_сервісу]. Починаючи з Oracle
11g, синтаксис наступний:
[//]назва_хосту[:порт][/назва_сервісу][:тип_сервера][/назва_примірника].
Додаткові можливості були запроваджені в Oracle 19c, як от налаштування
обмеженого у часі та постійного з'єднання. Докладніше про це у документації
Oracle. Назви служб можна побачити, запустивши утиліту Oracle
lsnrctl status
на машині сервера бази даних.
Файл tnsnames.ora може бути на шляху пошуку Oracle Net, що
містить /ваш/шлях/до/instantclient/network/admin,
$ORACLE_HOME/network/admin та /etc.
Як варіант, можна встановити TNS_ADMIN
, тоді буде прочитано
файл $TNS_ADMIN/tnsnames.ora. Вебсервер має мати право
на читання цього файлу.
encoding
Визначає набір символів, які використовують клієнтські бібліотеки Oracle. Кодування може не збігатися з тим, що використовує база даних. Якщо так, Oracle намагатиметься перекодувати дані. Залежно від кодування, це може не давати прийнятні результати. Перетворення також збільшуватиме час виконання.
Якщо не визначено, то клієнтські
бібліотеки Oracle оберуть кодування, яке вказано в змінній оточення
NLS_LANG
.
Визначення цього параметра може скоротити час з'єднання.
session_mode
Цей параметр доступний, починаючи з
PHP 5 (PECL OCI8 1.1) та має такі допустимі значення:
OCI_DEFAULT
, OCI_SYSOPER
і
OCI_SYSDBA
. Якщо вказано OCI_SYSOPER
або OCI_SYSDBA
, то ця функція намагатиметься встановити
привілейоване підключення за допомогою зовнішніх облікових даних. Привілейовані
з'єднання початково вимкнені. Для увімкнення необхідно директиві oci8.privileged_connect встановити
значення On
.
У PHP 5.3 (PECL OCI8 1.3.4) вводиться значення режиму
OCI_CRED_EXT
. Воно вказує Oracle використовувати зовнішню
автентифікацію або автентифікацію операційної системи, котра має бути
налаштована в базі даних. Прапорець OCI_CRED_EXT
дозволено
використовувати тільки з іменем користувача "/" та порожнім паролем.
oci8.privileged_connect може
бути On
або Off
.
OCI_CRED_EXT
можна поєднувати з режимами
OCI_SYSOPER
або
OCI_SYSDBA
.
OCI_CRED_EXT
не підтримується у Windows з міркувань
безпеки.
Returns a connection identifier or false
on error.
Версія | Опис |
---|---|
8.0.0, PECL OCI8 3.0.0 |
connection_string is now nullable.
|
Приклад #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";
?>
Приклад #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";
?>
Приклад #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";
?>
Приклад #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
?>
Зауваження:
An incorrectly installed or configured OCI8 extension will often manifest itself as a connection problem or error. See Installing/Configuring for troubleshooting information.