Drupal连接Oracle

当我们使用Drupal构建一个大型项目的时候,我们常常会和各种业务系统打交道,而有的业务系统数据库用的是oracle,我们需要建立与oracle的连接,从里面查询我们需要的数据。

我们假定你已经配置好了,oracle的相关库。

windows下面参考:

Drupal 与Oracle集成时,oracle相关配置文档, http://www.thinkindrupal.com/node/6009 

linux下面也需要安装oracle的客户端,然后安装PHP的oracle扩展,这个过程有点费事,网上有很多教程。


我们假定你已经完成了这些配置。我们封装的连接oracle的函数我们封装的连接oracle的函数,


/**
 * 从 Oracle 获取数据.
 *
 * @param string $sql
 *   SQL 链接字符串.
 * @param array $column_names
 *   返回的数据列名. 依据列名返回数据.
 * @return array
 *   数据.
 */
function myoracle_retrieve_data($sql, array $column_names = array()) {

  $data = array();

  $conn = oci_connect('username', 'password', 'dbname');
  if (!$conn) {
    $e = oci_error();
	\Drupal::logger('myoracle')->error("数据库连接时出错: " .var_export($e,true));
    return $data;
  }
  \Drupal::logger('myoracle')->notice("查询SQL: " .var_export($sql,true));

  // 编译sql语句.
  $ora = oci_parse($conn, $sql);
  oci_execute($ora, OCI_DEFAULT);

  while ($row = oci_fetch_array($ora)) {

    $tmp = array();
    foreach ($column_names as $name) {
      $tmp[$name] = $row[$name];
    }
    $data[] = $tmp;
  }
  return $data;
}


    在这个函数里面,设置用oracle的用户名,密码,数据库名,就可以连接oracle,给出一个oracle的sql语句,就能够查找到一个结果数组,剩下的就交给你自己处理了。


我们是直接连的,Drupal官方有oracle的数据库驱动,https://www.drupal.org/project/oracle  ,它允许你将整个Drupal跑在oracle上,这个用的人很少,至少理论上是可行的。


Drupal版本:

Linux下面的Drupal连接oracle配置文档

1, 先用一段代码测试一下:

       $conn = oci_connect('username', 'password', 'dbname');

if($conn) {

  //echo"连接oracle成功!";

  drupal_set_message('连接oracle成功!');

}else{

 // echo"连接oracle失败!";exit;

  drupal_set_message('连接oracle失败!');

}

 

报错:

The website encountered an unexpected error. Please try again later.
Error: Call to undefined function Drupal\mycustom\Controller\oci_connect() in Drupal\mycustom\Controller\MycustomController->testPage() (line 30 of modules/custom/mycustom/src/Controller/MycustomController.php).


参考文档:

https://www.cnblogs.com/xuzhengzong/p/9104700.html

 

第一步:

分别下载 oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm     oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm

放在/usr/packages/目录下,执行:

#  cd /usr/packages/

# rpm -ivh oracle-instantclient*

此时会生成/usr/lib/oracle/11.2/client64/lib/目录

  

2步:


二、修改/etc/ld.so.conf配置文件

追加以下内容 -- 上面生成文件的路径,没有64的写client/lib/

/usr/lib/oracle/11.2/client64/lib/

保存、退出,执行命令 # ldconfig

  

第3步:

三、安装oci8

 

下载地址:http://pecl.php.net/package/oci8

下载 oci-2.0.8.tgz

放在/usr/packages/目录下,依次执行:

 

tar -xvzf oci-2.0.8.tgz


 

 

Can't find PHP headers in /usr/include/php

The php-devel package is required for use of this command.

 

 

安装php-dev以及依赖Perl(tap::parser)

 

对应于:

rpm -ivh perl-Test-Harness-3.28-3.el7.noarch.rpm

 


 编辑php.ini

 

extension=oci8.so

 



Drupal版本: