ThinkPHP連接ORACLE數(shù)據(jù)庫(kù)的詳細(xì)教程
概念
- 要連接Oracle數(shù)據(jù)庫(kù),必須有兩個(gè)東西,一個(gè)PHP官方寫的擴(kuò)展,一個(gè)Oracle官方寫的客戶端
- PHP是通過擴(kuò)展去操作oralce客戶端連接的服務(wù)端數(shù)據(jù)庫(kù),所以兩個(gè)都不能少,而且版本必須一致
- PHP官方寫的Oracle擴(kuò)展:oci8,有很多版本,還有32位和64位,每個(gè)版本官網(wǎng)有寫對(duì)于的oracle版本
- Ocracle官方寫的客戶端:Instant Client,也分為32位和64位,需要根據(jù)PHP匹配,下面會(huì)講
基本步驟
- 下載并配置
oci8擴(kuò)展 - 下載并配置
oracle客戶端 - 配置
thinkphp
詳細(xì)操作
下載并配置oci8擴(kuò)展

- 如何選擇版本:
- 打開phpstudy環(huán)境,打開首頁(yè)phpinfo.php,查看PHP版本

- 這里7.0.12選擇32位的oci8擴(kuò)展+32位的Instant Client
- 下載對(duì)于版本

- 7.3以上的PHP要選擇2.2.0以上版本,這里選擇7.0對(duì)于的版本,因?yàn)槭褂玫?code>phpstudy2016,使用的PHP版本是
php-7.0.12-nts - 注意對(duì)應(yīng)版本的位數(shù),32和64不能兼容
- 解壓后把這些全部拷貝到PHP的ext目錄下
D:\phpStudy\php\php-7.0.12-nts\ext

- 打開php.ini,找到extension所在,填寫以下內(nèi)容
extension=php_pdo_oci.dll extension=php_oci8.dll ;;extension=php_oci8_11g.dll extension=php_oci8_12c.dll
- 說(shuō)明:
php_pdo_oci.dll:這個(gè)是phpstudy自帶的,使用pdo方法去連接oci8,這個(gè)必須打開php_oci8.dll:這個(gè)是拷貝進(jìn)入的oci8基本擴(kuò)展,必須打開php_oci8_11g.dll / php_oci8_12c.dll:這個(gè)是擴(kuò)展版本,實(shí)測(cè)任意打開一個(gè),都可以連接oracle 11g和oracle 19c,后面一個(gè)感覺速度更快- 重啟phpstudy
- 出現(xiàn)oci8擴(kuò)展,說(shuō)明安裝成功

- 新安裝的Oracle Run-time Client Library Version可能出現(xiàn)0.0.0.0,等配置Instant Client后再刷新會(huì)出現(xiàn)版本信息
- 下載并配置oracle客戶端
- 下載地址:https://www.oracle.com/database/technologies/instant-client/downloads.html

- 這里也有版本選擇,不管phpinfo是32還是64,這里都下載32位,實(shí)測(cè)32位可以匹配64和32的PHP(phpstudy_pro中PHP7.3.4版本測(cè)試)
- 下載需登錄,注冊(cè)一個(gè)賬號(hào)即可
- 這里選擇phpinfo中提示的instantclient_12_1


- 解壓到任意沒有中文路徑的地方,如D:/instantclient_12_1
- 配置環(huán)境變量,這個(gè)和JAVA類似,就是可以在任何地方執(zhí)行instantclient_12_1中功能

- 這個(gè)必須要配置,最終連接Oracle數(shù)據(jù)庫(kù)的是
instant client客戶端,這個(gè)和oracle不匹配直接導(dǎo)致無(wú)法連接,實(shí)測(cè)32位可以匹配PHP64或者32(instant client版本還和oracle服務(wù)端版本有關(guān),32位不行就換一個(gè)試試) - 配置thinkphp
- common->config中配置
<?php return array( //連接oracle 11g r2 'DB_TYPE' => 'oracle', // 數(shù)據(jù)庫(kù)類型 'DB_HOST' => '127.0.0.1', // 服務(wù)器地址 'DB_NAME' => 'orcl', // 數(shù)據(jù)庫(kù)名 'DB_USER' => 'usr', // 用戶名 'DB_PWD' => 'pwd', // 密碼 'DB_PORT' => '1521', // 端口 //連接oracle 19c CBD模式 // 'DB_TYPE' => 'oracle', // 數(shù)據(jù)庫(kù)類型 // 'DB_HOST' => '127.0.0.1', // 服務(wù)器地址 // 'DB_NAME' => 'orcl', // 數(shù)據(jù)庫(kù)名 // 'DB_USER' => 'C##usr', // 用戶名 // 'DB_PWD' => 'pwd', // 密碼 // 'DB_PORT' => '1521', // 端口 );
- 書寫測(cè)試連接方法
<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
public function index(){
$sql = " select * from tablea where rownum <10 ";
$rs = M()->query($sql);
var_dump($rs);
}
}
- 經(jīng)實(shí)測(cè),11G和19C都可以連接
問題排除
oci_connect(): OCIEnvNlsCreate() failed. There is something wrong with your system - please check that PATH includes the directory with Oracle Instant Client libraries
- 解決方案:Instant Client沒有配置在環(huán)境變量中,配置一下即可
SQLSTATE[HY000]: OCIEnvNlsCreate: Check the character set is valid and that PHP has access to Oracle libraries and NLS data (ext\pdo_oci\oci_driver.c:688)
- 解決方案:Instant Client版本不匹配,如果是64位的,換成32位的試一試
以上就是ThinkPHP連接ORACLE數(shù)據(jù)庫(kù)的詳細(xì)教程的詳細(xì)內(nèi)容,更多關(guān)于ThinkPHP連接ORACLE的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
使用php 獲取時(shí)間今天明天昨天時(shí)間戳的詳解
本篇文章是對(duì)用php獲取時(shí)間今天明天昨天時(shí)間戳的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
PHP 抓取網(wǎng)頁(yè)圖片并且另存為的實(shí)現(xiàn)代碼
URL是遠(yuǎn)程的完整圖片地址,不能為空, $filename 是另存為的圖片名字 默認(rèn)把圖片放在以此腳本相同的目錄里2010-03-03
php+js實(shí)現(xiàn)百度地圖多點(diǎn)標(biāo)注的方法
這篇文章主要介紹了php+js實(shí)現(xiàn)百度地圖多點(diǎn)標(biāo)注的方法,涉及php結(jié)合js針對(duì)百度地圖接口調(diào)用與json操作相關(guān)技巧,需要的朋友可以參考下2016-11-11
php下intval()和(int)轉(zhuǎn)換使用與區(qū)別
想知道使用intval()和(int)轉(zhuǎn)換有什么區(qū)別?或者說(shuō)兩者有什么不同,包括功能、定義方面的?;蛘吆褪褂妙l率、效率等。2008-07-07
談?wù)凱HP連接Access數(shù)據(jù)庫(kù)的注意事項(xiàng)
有的時(shí)候需要用php連接access數(shù)據(jù)庫(kù),結(jié)果整了半天Access數(shù)據(jù)庫(kù)就是連接不上,查找很多資料,以下是些個(gè)人經(jīng)驗(yàn),希望能給需要連接access 數(shù)據(jù)的人帶來(lái)幫助。2016-08-08
php中使用parse_url()對(duì)網(wǎng)址進(jìn)行解析的實(shí)現(xiàn)代碼(parse_url詳解)
parse_url用來(lái)解析一個(gè) URL 并返回一個(gè)關(guān)聯(lián)數(shù)組,包含在 URL 中出現(xiàn)的各種組成部分2012-01-01

