drupal 7中操作遠程oracle數據庫

系統環境需求

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 裡增加數據庫信息:

/**
 * Database connection settings for the oci8 module. These settings
 * mimic Drupal's main $databases variable.
 */
$conf['oci8'] = array(
  'databases' => array(
    'default' => array(
      'default' => array(
        'database' => 'DATABASE_NAME',
        'username' => 'DATABASE_USER_NAME',
        'password' => 'DATABASE_PASSWORD',
        'hosts' => array('HOST_A', 'HOST_B'),
        'port' => 'PORT_NUMBER',
        'character_set' => 'CHARACTER_SET',
      ),
    ),
  ),
);

數據庫查詢

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

數據庫更新/修改

$connect = new OCI8DatabaseConnection($GLOBALS['conf']['oci8']['databases']['default']['default']);

$resource = $connect->getResource();

$query = oci_parse($resource, "INSERT INTO MID_BD_PSNDOC VALUES (:id,:psncode,null,'TEST FIELD')");

oci_bind_by_name($query, ':id', 234);
oci_bind_by_name($query, ':psncode', 'psncode');

$result = oci_execute($query);

if (!$result) {
        $error = oci_error($query);
        watchdog('Oci8', '寫入數據庫失敗。' . $error['message'],  WATCHDOG_ERROR);
}

參考

Y Cheung

Y Cheung

Blogger, Programer & Traveler.
Shanghai