oci_pconnect

(PHP 5, PECL oci8:1.1-1.2.4)

oci_pconnect — Устанавливает постоянное соединение с сервером Oracle

Описание

resource oci_pconnect ( string $username , string $password [, string $db [, string $charset ]] )

oci_pconnect() создает постоянное соединение с сервером Oracle. Необязательный третий параметр db может содержать имя локального экземпляра Oracle или имя сервера, указанного в файле tnsnames.ora, с которым вы хотите соединиться. Если третий параметр не указан, PHP будет использовать переменные ORACLE_SID и TWO_TASK для определения имени локального экземпляра Oracle и местонахождения файла tnsnames.ora соответственно.

Если вы используете сервер Oracle версии 9.2 и выше, то вы можете указать кодировку, которая будет использована в новом соединении. Кодировка указывается в параметре charset . Если же вы используете версии сервера Oracle младше 9.2, то этот параметр будет проигнорирован, а вместо него будет использована переменная окружения NLS_LANG.

oci_pconnect() возвращает идентификатор соединения или FALSE в случае ошибки.

Замечание: В версиях PHP ниже 5.0.0 эта функция называлась ociplogon(). В PHP 5.0.0 и выше ociplogon() является алиасом oci_pconnect(), поэтому вы можете продолжать использовать это имя, однако это не рекомендуется.

См. также oci_connect() и oci_new_connect().

Коментарии

[Editor's note: OCI8 1.3 should not experience the problem described in this user comment. The first use of such a connection will return an Oracle error which will trigger a cleanup in PHP.  Subsequent persistent connection calls will then succeed.  For high availability you might consider doing consecutive oci_pconnect calls in your script.]

If you connect using oci_pconnect and the connection has logged you off but is still valid, there seems to be no way to re-use that connection. The next time I try oci_pconnect and then perform an oci_execute operation, I get a "ORA-01012: not logged on" warning. This problem remains, even if I close the connection using oci_close. I ended up with the following (rather annoying) code.

<?php
   
function getOracleConnection()
    {
      if (!
function_exists('oci_pconnect'))
        return 
false;
     
$toReturn oci_pconnect('user''pass''db');
      if (
$testRes = @oci_parse($toReturn'SELECT Count(group_type_code) FROM pvo.group_type'))
        if (@
oci_execute($testRes))
          if (@
oci_fetch_array($testRes))
            return 
$toReturn;
     
oci_close($toReturn);
      if (!
function_exists('oci_connect'))
        return 
false;
     
$toReturn oci_connect('user''pass''db');
      if (
$testRes = @oci_parse($toReturn'SELECT Count(group_type_code) FROM pvo.group_type'))
        if (@
oci_execute($testRes))
          if (@
oci_fetch_array($testRes))
            return 
$toReturn;
     
oci_close($toReturn);
      if (!
function_exists('oci_new_connect'))
        return 
false;
     
$toReturn oci_new_connect('user''pass''db');
      if (
$testRes = @oci_parse($toReturn'SELECT Count(group_type_code) FROM pvo.group_type'))
        if (@
oci_execute($testRes))
          if (@
oci_fetch_array($testRes))
            return 
$toReturn;
     
oci_close($toReturn);
      return 
false;
    }
?>
2008-10-09 12:38:32
http://php5.kiev.ua/manual/ru/function.oci-pconnect.html
Installed on CentOS 6.2, and had lots of trouble getting it to recognize tnsnames.ora.  The fix for me was:

1. Make sure apache is getting the TNS_ADMIN env variable by putting it in the /etc/init.d/httpd file:
 TNS_ADMIN=/usr/lib/oracle/11.2/client64/network/admin
 export PATH TNS_ADMIN

This can be debugging in PHP by <?php echo system('env'); ?> and by verifying that TNS_ADMIN is there.

2. Make sure to use the name at the beginning of the tnsnames.ora file - not the SID (although ideally they should match.  However, if the name at the beginning is XXXX.world then pconnect will expect this - not the SID)
2012-06-13 17:29:28
http://php5.kiev.ua/manual/ru/function.oci-pconnect.html

    Поддержать сайт на родительском проекте КГБ