目前我正在使用 codeigniter 与oracle 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";
}
}
我差不多2周就遇到了这个问题。我也已经搜索了解决方案,但没有任何工作。你能救我吗?
答案 0 :(得分:1)
我知道这是一个很冷的案例,但是现在有些人可能仍会使用Oracle 10g和11g。
要检查的几点:
您是在说“ php.ini
”,但是您是否在网络服务器中取消了注释?还是只在cli
中? (有两个php.ini,具体取决于 SAPI )。
从网页中运行时,您能在oci8
的输出中看到phpinfo()
吗?
您是否曾尝试激活Web服务器的php.ini中的php_oci8_11g.dll
模块,而不是php_oci8.dll
吗?
您是否尝试过简单的单元测试,例如:<?php echo OCI_COMMIT_ON_SUCCESS; ?>
在激活cli
php.ini中的oci8模块后,从命令行在单行代码上方尝试一下(显然,如果cli,则无需重新启动任何内容)
而不是掏出“大武器” =完整的网络应用程序。
如果您曾经在Ubuntu上进行过设置,请确保在/ etc / apache2 / envvars中定义了LD_LIBRARY_PATH,以指向InstantClient库(从oracle.com下载),例如/ opt / oracle / instantclient_12_2
在对服务器进行php.ini每次修改后,显然会重新启动Web服务器。