Использование неопределенной константы OCI_COMMIT_ON_SUCCESS - предполагается, что 'OCI_COMMIT_ON_SUCCESS' при создании соединения с БД Oracle

1

В настоящее время я работаю с oracle db с помощью codeigniter. Я новичок в этом db, когда я пытаюсь установить соединение. Я получил эту ошибку.

Возникла ошибка PHP

Severity: Notice
Message: Use of undefined constant OCI_COMMIT_ON_SUCCESS - assumed 'OCI_COMMIT_ON_SUCCESS'
Filename: database/DB.php
Line Number: 144 

Я уже разрешаю расширение в php.ini

;extension=php_mysqli.dll
extension=php_oci8.dll      ; Use with Oracle 10gR2 Instant Client
;extension=php_oci8_11g.dll  ; Use with Oracle 11gR2 Instant Client

Ниже приведен мой код для database.php:

$active_group = 'default';
$active_record = TRUE;
$db['default']['hostname'] = 'xxx.xxx.x.xx';
$db['default']['username'] = 'xxxx';
$db['default']['password'] = 'xxxx';
$db['default']['database'] = '';
$db['default']['dbdriver'] = 'oci8';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;

Ниже приведен код на контроллере:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Welcome extends CI_Controller {


    function __construct()  {
            parent::__construct(); 
    }

    function index()        {
            $this->db = $this->load->database('default',TRUE);

            if (!empty($this->db))
                echo "Connected!"."\n";
            else
                echo "Closed"."\n";
    }
}

Я застрял в этой проблеме почти две недели. Я также уже искал решение, но ничего не работает. можешь мне помочь?

  • 0
    stackoverflow.com/a/6758426/3181416
  • 0
    stackoverflow.com/a/9877694/3181416
Показать ещё 3 комментария
Теги:
database
codeigniter

1 ответ

0

Я знаю, что это холодный случай, но некоторые люди все еще могут работать с Oracle 10g и 11g в эти дни.

Несколько пунктов, чтобы проверить:

  • Вы говорите "в php.ini ", но раскомментировали ли вы это в веб-сервере? Или просто в cli? (есть два php.ini, в зависимости от SAPI).

  • Можете ли вы увидеть oci8 в выводе phpinfo() при запуске из веб-страницы?

  • Вы когда-нибудь пытались активировать модуль php_oci8_11g.dll в веб-сервере php.ini вместо php_oci8.dll?

  • Вы пробовали простой unit тест, например: <?php echo OCI_COMMIT_ON_SUCCESS;?> <?php echo OCI_COMMIT_ON_SUCCESS;?>

  • Попробуйте это выше одной строки из командной строки, после активации любого модуля oci8 в cli php.ini (нет необходимости перезапускать что-либо, если cli, очевидно) вместо того, чтобы вытаскивать "большое оружие" = полное веб-приложение.

  • Если вы когда-либо устанавливали это в Ubuntu, убедитесь, что LD_LIBRARY_PATH был определен в /etc/apache2/envvars, чтобы указывать на библиотеку instantclient (загруженную с oracle.com), например /opt/oracle/instantclient_12_2

  • Очевидно, перезапустите веб-сервер после каждой модификации в php.ini для сервера.

  • 0
    Кстати, ожидаемое значение для OCI_COMMIT_ON_SUCCESS составляет 32 (= 0x20)
  • 0
    Если Instant Client является единственным установленным программным обеспечением Oracle, проще использовать ldconfig для глобального обновления пути поиска в библиотеке, вместо ручной настройки среды Apache.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню