ThinkPHP 連接 Oracle的配置

1. 配置信息修改,因為是Oracle,所以以前的db_host db_port 拼成了 DB_NAME ,修改文件是 ../Conf/config.php

// 示例的全局數據庫配置文件

return array(

'DB_TYPE' => 'Oracle' , // 數據庫類型

'DB_NAME' => "10.10.1.6:1521/orcl", // 數據庫名

'DB_USER' => 'hy', // 用戶名

'DB_PWD' => 'hy', // 密碼


2. 需要在選擇數據庫類型生成的工廠模式中選擇/Extend/Driver/Db/DbOracle.class.php驅動類

相關方式是在 ./ThinkPHP/Lib/Core/Db.class.php 文件中factory()

public function factory( $db_config='' ) {

// 讀取數據庫配置

$db_config = $this ->parseConfig($db_config);

if( empty($db_config ['dbms' ]))

throw_exception(L( '_NO_DB_CONFIG_'));

// 數據庫類型

$this->dbType = ucwords(strtolower($db_config ['dbms' ]));

$class = 'Db' . $this ->dbType;

if(is_file(CORE_PATH. 'Driver/Db/'.$class .'.class.php' )) {

// 內置驅動

$path = CORE_PATH;

} else{ // 擴展驅動

$path = EXTEND_PATH;

}

// 檢查驅動類

if(require_cache( $path.'Driver/Db/' .$class .'.class.php' )) {

$db = new $class($db_config );

// 獲取當前的數據庫類型

if( 'pdo' != strtolower($db_config ['dbms' ]) )

$db->dbType = strtoupper($this ->dbType);

else

$db->dbType = $this ->_getDsnType($db_config[ 'dsn']);

if(APP_DEBUG) $db->debug = true ;

} else {

// 類沒有定義

throw_exception(L( '_NOT_SUPPORT_DB_').': ' . $db_config['dbms' ]);

}

return $db;

}


3. 使用Oracle方法需注意,因為Oracle中字段大寫,還有很多 增刪改查方法與mysql不同,所以使用時還需注意

如下面函數就是死在了大寫上 ./ThinkPHP/Extend/Driver/Db/DbOracle.class.php

public function getFields( $tableName) {

$result = $this ->query("select a.column_name,data_type,decode(nullable,'Y',0,1) notnull,data_default,decode(a.column_name,b.column_name,1,0) pk "

."from user_tab_columns a,(select column_name from user_constraints c,user_cons_columns col "

."where c.constraint_name=col.constraint_name and c.constraint_type='P'and c.table_name='".strtoupper( $tableName)

. "') b where table_name='".strtoupper($tableName )."' and a.column_name=b.column_name(+)");

$info = array ();

if( $result) {

foreach ($result as $key => $val) {

$info[strtolower($val ['COLUMN_NAME' ])] = array(

'name' => strtolower($val ['COLUMN_NAME' ]),

'type' => strtolower($val ['DATA_TYPE' ]),

'notnull' => $val ['NOTNULL' ],

'default' => $val ['DATA_DEFAULT' ],

'primary' => $val ['PK' ],

'autoinc' => $val ['PK' ],

);

}

}

return $info;

}


ThinkPHP 連接 Oracle的配置


分享到:


相關文章: