В настоящее время я работаю с 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";
}
}
Я застрял в этой проблеме почти две недели. Я также уже искал решение, но ничего не работает. можешь мне помочь?
Я знаю, что это холодный случай, но некоторые люди все еще могут работать с 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 для сервера.