当我们使用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上,这个用的人很少,至少理论上是可行的。
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