当我们使用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