oci_connect

(PHP 5, PHP 7, PHP 8, PECL OCI8 >= 1.1.0)

oci_connect — Oracle 데이터베이스에 연결


설명

oci_connect(
    string $username,
    string $password,
    ?string $connection_string = null,
    string $encoding = "",
    int $session_mode = OCI_DEFAULT
): resource|false
                

대부분의 다른 OCI8 작업에 필요한 연결 식별자를 반환합니다.

성능을 위해 대부분의 애플리케이션은 oci_connect() 대신 oci_pconnect()를 사용하여 영구 연결을 사용해야 합니다. 연결 관리 및 연결 풀링에 대한 일반 정보는 연결 처리를 참조하십시오.

PHP 5.1.2(PECL OCI8 1.1)부터 oci_close()를 사용하여 연결을 닫을 수 있습니다.

동일한 매개변수를 사용하여 oci_connect()에 대한 두 번째 및 후속 호출은 첫 번째 호출에서 반환된 연결 핸들을 반환합니다. 이는 동일한 기본 데이터베이스 연결을 사용하기 때문에 한 핸들의 트랜잭션이 다른 핸들에도 있음을 의미합니다. 두 핸들을 트랜잭션 방식으로 서로 격리해야 하는 경우 대신 oci_new_connect()를 사용하십시오.


매개변수

username
Oracle 사용자 이름입니다.
password
username의 비밀번호입니다.
connection_string
연결할 Oracle 인스턴스를 포함합니다. » Easy Connect 문자열, tnsnames.ora 파일의 연결 이름 또는 로컬 Oracle 인스턴스의 이름일 수 있습니다.

지정하지 않거나 null인 경우 PHP는 TWO_TASK(Linux의 경우) 또는 LOCAL(Windows의 경우) 및 ORACLE_SID와 같은 환경 변수를 사용하여 연결할 Oracle 인스턴스를 결정합니다.

Easy Connect 이름 지정 방법을 사용하려면 PHP가 Oracle 10g 이상의 클라이언트 라이브러리와 연결되어 있어야 합니다. Oracle 10g용 Easy Connect 문자열은 [//]host_name[:port][/service_name] 형식입니다. Oracle 11g에서 구문은 [//]host_name[:port][/service_name][:server_type][/instance_name]입니다. 시간 초과 및 연결 유지 설정을 포함하여 Oracle 19c에 추가 옵션이 도입되었습니다. 오라클 문서를 참조하십시오. 서비스 이름은 데이터베이스 서버 시스템에서 Oracle 유틸리티 lsnrctl status를 실행하여 찾을 수 있습니다.

tnsnames.ora 파일은 /your/path/to/instantclient/network/admin, $ORACLE_HOME/network/admin/etc를 포함하는 Oracle Net 검색 경로에 있을 수 있습니다. 또는 $TNS_ADMIN/tnsnames.ora를 읽도록 TNS_ADMIN을 설정합니다. 웹 데몬에 파일에 대한 읽기 액세스 권한이 있는지 확인하십시오.

encoding
Oracle 클라이언트 라이브러리에서 사용하는 문자 집합을 결정합니다. 문자 집합은 데이터베이스에서 사용하는 문자 집합과 일치할 필요가 없습니다. 일치하지 않는 경우 Oracle은 데이터를 데이터베이스 문자 집합으로 또는 그 반대로 변환하기 위해 최선을 다할 것입니다. 문자 집합에 따라 사용 가능한 결과를 제공하지 않을 수 있습니다. 변환은 또한 약간의 시간 오버헤드를 추가합니다.

지정하지 않으면 Oracle 클라이언트 라이브러리는 NLS_LANG 환경 변수에서 문자 집합을 결정합니다.

이 매개변수를 전달하면 연결하는 데 걸리는 시간을 줄일 수 있습니다.

session_mode
이 매개변수는 PHP 5(PECL OCI8 1.1) 버전부터 사용할 수 있으며 OCI_DEFAULT, OCI_SYSOPEROCI_SYSDBA 값을 허용합니다. OCI_SYSOPER 또는 OCI_SYSDBA가 지정된 경우 이 함수는 외부 자격 증명을 사용하여 권한 있는 연결을 설정하려고 시도합니다. 권한 있는 연결은 기본적으로 비활성화되어 있습니다. 활성화하려면 oci8.privileged_connect를 On으로 설정해야 합니다.

PHP 5.3(PECL OCI8 1.3.4)은 OCI_CRED_EXT 모드 값을 도입했습니다. 이는 Oracle이 데이터베이스에서 구성해야 하는 외부 또는 OS 인증을 사용하도록 지시합니다. OCI_CRED_EXT 플래그는 "/"의 사용자 이름과 빈 암호에만 사용할 수 있습니다. oci8.privileged_connectOn 또는 Off일 수 있습니다.

OCI_CRED_EXTOCI_SYSOPER 또는 OCI_SYSDBA 모드와 결합될 수 있습니다.

OCI_CRED_EXT는 보안상의 이유로 Windows에서 지원되지 않습니다.


반환 값

연결 식별자를 반환하거나 오류가 발생하면 false를 반환합니다.


변경 로그

버전 설명
8.0.0, PECL OCI8 3.0.0 connection_string은 이제 null을 허용합니다.

Examples

예제 #1 Easy Connect 구문을 사용하는 기본 oci_connect()

                  
<?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) : "&nbsp;") . "</td>\n";
    }
    echo "</tr>\n";
}
echo "</table>\n";

?>
                  
                

예제 #2 네트워크 연결 이름을 사용하는 기본 oci_connect()

                 
<?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) : "&nbsp;") . "</td>\n";
    }
    echo "</tr>\n";
}
echo "</table>\n";

?>
                 
               

예제 #3 명시적 문자 집합이 있는 oci_connect()

                
<?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) : "&nbsp;") . "</td>\n";
    }
    echo "</tr>\n";
}
echo "</table>\n";

?>
                
              

예제 #4 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

?>
                 
               

노트

메모: 잘못 설치되거나 구성된 OCI8 확장은 종종 연결 문제 또는 오류로 나타납니다. 문제 해결 정보는 설치/구성을 참조하십시오.


기타