【问题标题】:Use of undefined constant OCI_COMMIT_ON_SUCCESS - assumed 'OCI_COMMIT_ON_SUCCESS' while creating Oracle db connection使用未定义的常量 OCI_COMMIT_ON_SUCCESS - 创建 Oracle 数据库连接时假定为“OCI_COMMIT_ON_SUCCESS”
【发布时间】:2016-02-29 01:51:53
【问题描述】:

目前我正在使用 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;

下面是controller的代码:

<?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 周。我也已经搜索了解决方案,但没有任何工作。你能帮帮我吗?

【问题讨论】:

标签: php database oracle codeigniter


【解决方案1】:

我知道这是一个冷门,但现在有些人可能仍在使用 Oracle 10g 和 11g。

需要检查的几点:

  • 您说的是“php.ini”,但您是否在网络服务器中取消了它的注释?或者只是在cli 一个? (有两个php.ini,取决于SAPI)。

  • 从网页中运行时,您能否在 phpinfo() 的输出中看到 oci8

  • 您是否曾尝试激活网络服务器的 php.ini 中的 php_oci8_11g.dll 模块,而不是 php_oci8.dll

  • 您是否尝试过简单的单元测试,例如:&lt;?php echo OCI_COMMIT_ON_SUCCESS; ?&gt;

  • cli php.ini 中激活任一 oci8 模块后,从命令行尝试以上单行(显然,如果 cli 则无需重新启动任何东西) 而不是拔出“大武器” = 完整的 webapp。

  • 如果您曾经在 Ubuntu 上进行过设置,请确保在 /etc/apache2/envvars 中定义了 LD_LIBRARY_PATH,以指向 Instantclient 库(从 oracle.com 下载),例如/opt/oracle/instantclient_12_2

  • 每次修改php.ini for server后显然要重启webserver。

【讨论】:

  • 顺便说一句,OCI_COMMIT_ON_SUCCESS 的预期值为 32 (=0x20)
  • 如果 Instant Client 是唯一安装的 Oracle 软件,使用ldconfig 全局更新库搜索路径会更容易,而不是手动设置 Apache 环境。
猜你喜欢
  • 1970-01-01
  • 2014-06-29
  • 2012-04-10
  • 2018-03-08
  • 1970-01-01
  • 1970-01-01
  • 2015-07-11
  • 2014-05-07
  • 2014-04-30
相关资源
最近更新 更多