drupal 7中操作遠程oracle數據庫

Posted by Y Cheung on Wed, Jan 4, 2017

系統環境需求

PHP環境最好是 PHP 7,系統最好是紅帽系。

操作步驟

安裝Oracle Instant Client

Oracle官網頁面中找到系統對應的客戶端下載安裝,比如Y CHEUNG選擇的就是 Instant Client Downloads for Linux x86-64 ,Fedora可以下載RPM包直接安裝,非RedHat系統的可能需要先編譯,用make install的方式安裝。

主要是安裝basic包,比如YCHEUNG安裝的就是 oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm 。值得注意的是,下載前必須要註冊oracle用戶(免費)。

安裝 PHP Oci8擴展

用PERL安裝OCI8擴展。如果是PHP7以上的版本使用 perl install oci8 就好了,如果是低於PHP 7的版本環境的話則在perl安裝的時候要指定版本。

(最好是先裝oracle客戶端再裝PHP的oci8擴展,這樣在安裝oci8擴展的時候系統會自動找到客戶端的位置,就不需要再手動指定位置了。)

安裝 drupal Oci8 模組

Oracle integration Module : https://www.drupal.org/project/oci8

YCHUENG和同事稍微改了一下這個模組,以解決中文編碼和寫入數據庫的問題: GITHUB

配置數據庫

在 drupal 的 settings.php 裡增加數據庫信息:

 1/**
 2 * Database connection settings for the oci8 module. These settings
 3 * mimic Drupal's main $databases variable.
 4 */
 5$conf['oci8'] = array(
 6  'databases' => array(
 7    'default' => array(
 8      'default' => array(
 9        'database' => 'DATABASE_NAME',
10        'username' => 'DATABASE_USER_NAME',
11        'password' => 'DATABASE_PASSWORD',
12        'hosts' => array('HOST_A', 'HOST_B'),
13        'port' => 'PORT_NUMBER',
14        'character_set' => 'CHARACTER_SET',
15      ),
16    ),
17  ),
18);

數據庫查詢

1oci8_db_query("select * from basictable")->fetchAll();

數據庫更新/修改

 1$connect = new OCI8DatabaseConnection($GLOBALS['conf']['oci8']['databases']['default']['default']);
 2
 3$resource = $connect->getResource();
 4
 5$query = oci_parse($resource, "INSERT INTO MID_BD_PSNDOC VALUES (:id,:psncode,null,'TEST FIELD')");
 6
 7oci_bind_by_name($query, ':id', 234);
 8oci_bind_by_name($query, ':psncode', 'psncode');
 9
10$result = oci_execute($query);
11
12if (!$result) {
13        $error = oci_error($query);
14        watchdog('Oci8', '寫入數據庫失敗。' . $error['message'],  WATCHDOG_ERROR);
15}

Reference