windwos下使用php連接oracle數(shù)據(jù)庫(kù)的過(guò)程分享
要使用php連接oracle,基本條件是
1.需要你安裝了php、
2.安裝了oracle、
3.配置了tnsname.ora。
本地命令行使用sqlplus能夠連接到oracle。
根據(jù)你機(jī)器的版本選對(duì)64bit或者32bit的php程序,我們使用php的oci8擴(kuò)展連接oracle
安裝好php后,打開(kāi)oci8擴(kuò)展,
寫(xiě)一段連接oracle的ora.php代碼
<?php
$conn = oci_connect('hr', 'welcome', 'MYDB');
if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
// Prepare the statement
$stid = oci_parse($conn, 'SELECT * FROM departments');
if (!$stid) {
$e = oci_error($conn);
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
// Perform the logic of the query
$r = oci_execute($stid);
if (!$r) {
$e = oci_error($stid);
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
// Fetch the results of the query
print "<table border='1'>\n";
while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
print "<tr>\n";
foreach ($row as $item) {
print " <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : " ") . "</td>\n";
}
print "</tr>\n";
}
print "</table>\n";
oci_free_statement($stid);
oci_close($conn);
?>
說(shuō)明:
oci_connect('hr', 'welcome', 'MYDB')
第一個(gè)參數(shù)是oracle的用戶(hù)名,
第二個(gè)參數(shù)是oracle的密碼
第三個(gè)參數(shù)是tnsnames.ora里的連接串名
命令行下執(zhí)行
提示如下錯(cuò)誤
PHP Warning: PHP Startup: Unable to load dynamic library 'C:\php\php_oci8.dll'- %1 不是有效的 Win32 應(yīng)用程序。 in Unknown on line 0
PHP Parse error: syntax error, unexpected '"user"' (T_CONSTANT_ENCAPSED_STRING) in C:\Users\nginx\Desktop\oraclephpoci\oci.php on line 3
開(kāi)始以為是沒(méi)有選對(duì)版本,我是64位的機(jī)器,結(jié)果說(shuō)是win32的程序,一看字面提示,我就重新安裝了新的32bit程序還是報(bào)錯(cuò)。
仔細(xì)查了查發(fā)現(xiàn)在32位像64位遷移的問(wèn)題,出現(xiàn)如下問(wèn)題時(shí),我們需要安裝Oracle Instant Client。
Unable to load dynamic library 'C:\Program Files (x86)\PHP\ext\php_oci8_11g.dll' - %1 is not a valid Win32 application.
Warning oci_connect(): OCIEnvNlsCreate() failed. There is something wrong with your system - please check that PATH includes the directory with Oracle Instant Client libraries
Oracle Instant Client,它是一個(gè)解壓后就能使用的程序,不需要安裝。
如果有oracle賬號(hào)的可以去oracle下載對(duì)應(yīng)的版本,(注冊(cè)用戶(hù)需要一堆信息)
http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html
嫌麻煩的同學(xué)使用這個(gè)地址下載
http://eduunix.ccut.edu.cn/index2/database/Oracle%20Instant%20Client/
下載后把壓縮包解壓到c:\oracleinstantclient,并添加路徑到環(huán)境變量PATH
重新執(zhí)行php ora.php,“%1 不是有效的 Win32 應(yīng)用程序”的錯(cuò)誤沒(méi)有了,但是會(huì)提示
代碼是從php官網(wǎng)直接拷過(guò)來(lái)的,代碼中有不可見(jiàn)的字符,使用notepad++查看所有字符,去掉亂碼即可。
繼續(xù)執(zhí)行,這次提示,
PHP Fatal error: ORA-12154: TNS:could not resolve the connect identifier specified in C:\Users\nginx\Desktop\airline\oci.php on line 6
看樣子是php沒(méi)有找到tnsnames.ora的位置,時(shí)間比較趕,那我就直接使用ip的形式,具體格式根據(jù)你的信息拼寫(xiě)oci_connect的第三個(gè)參數(shù)
oracle10格式:[//]host_name[:port][/service_name]
oracle11格式:[//]host_name[:port][/service_name][:server_type][/instance_name].
我具體使用的php oci連接串是:
配好上述信息后,終于能出結(jié)果了,但是發(fā)現(xiàn)查出來(lái)的結(jié)果中問(wèn)亂碼,這種問(wèn)題基本都是編碼不匹配。
php oci8中文亂碼解決辦法,先查詢(xún)你的oracle的數(shù)據(jù)庫(kù)編碼使用,
查出來(lái)的結(jié)果是SIMPLIFIED CHINESE_CHINA.ZHS16GBK,在php的代碼里設(shè)置環(huán)境變量
終于php能夠正確連接到oracle啦。
- php連接oracle數(shù)據(jù)庫(kù)及查詢(xún)數(shù)據(jù)的方法
- php連接oracle數(shù)據(jù)庫(kù)的方法(測(cè)試成功)
- ThinkPHP 連接Oracle數(shù)據(jù)庫(kù)的詳細(xì)教程[全]
- Linux下PHP連接Oracle數(shù)據(jù)庫(kù)
- Win7 64位系統(tǒng)下PHP連接Oracle數(shù)據(jù)庫(kù)
- 用PHP連接Oracle數(shù)據(jù)庫(kù)
- ThinkPHP連接Oracle數(shù)據(jù)庫(kù)
- php連接oracle數(shù)據(jù)庫(kù)的核心步驟
- PHP遠(yuǎn)程連接oracle數(shù)據(jù)庫(kù)操作實(shí)現(xiàn)方法圖文詳解
相關(guān)文章
php版微信公眾平臺(tái)開(kāi)發(fā)之驗(yàn)證步驟實(shí)例詳解
這篇文章主要介紹了php版微信公眾平臺(tái)開(kāi)發(fā)之驗(yàn)證步驟,結(jié)合實(shí)例形式詳細(xì)分析了php微信公眾平臺(tái)驗(yàn)證的操作步驟與相關(guān)參數(shù)含義,需要的朋友可以參考下2016-09-09
TP5框架實(shí)現(xiàn)一次選擇多張圖片并預(yù)覽的方法示例
這篇文章主要介紹了TP5框架實(shí)現(xiàn)一次選擇多張圖片并預(yù)覽的方法,結(jié)合實(shí)例形式詳細(xì)分析了thinkPHP5基于ajax數(shù)據(jù)提交上傳多張圖片與本地預(yù)覽相關(guān)操作技巧,需要的朋友可以參考下2020-04-04
TP5.0框架實(shí)現(xiàn)無(wú)限極回復(fù)功能的方法分析
這篇文章主要介紹了TP5.0框架實(shí)現(xiàn)無(wú)限極回復(fù)功能的方法,結(jié)合實(shí)例形式分析了thinkPHP5.0框架下無(wú)限極回復(fù)功能相關(guān)的數(shù)據(jù)庫(kù)、評(píng)論功能及界面布局實(shí)現(xiàn)方法,需要的朋友可以參考下2019-05-05
php實(shí)現(xiàn)當(dāng)前頁(yè)面點(diǎn)擊下載文件的實(shí)例代碼
下面小編就為大家?guī)?lái)一篇php實(shí)現(xiàn)當(dāng)前頁(yè)面點(diǎn)擊下載文件的實(shí)例代碼。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-11-11
PHP動(dòng)態(tài)地創(chuàng)建屬性和方法, 對(duì)象的復(fù)制, 對(duì)象的比較,加載指定的文件,自動(dòng)加載類(lèi)文件,命名空間
這篇文章主要介紹了PHP動(dòng)態(tài)地創(chuàng)建屬性和方法, 對(duì)象的復(fù)制, 對(duì)象的比較, 加載指定的文件, 自動(dòng)加載類(lèi)文件, 命名空間 的相關(guān)資料,需要的朋友可以參考下2016-05-05
Zend Framework入門(mén)教程之Zend_Registry組件用法詳解
這篇文章主要介紹了Zend Framework入門(mén)教程之Zend_Registry組件用法,結(jié)合實(shí)例形式分析了Zend_Registry組件實(shí)現(xiàn)對(duì)象注冊(cè)的設(shè)置、獲取、判斷、刪除等操作常用技巧,需要的朋友可以參考下2016-12-12
laravel5.6 框架郵件隊(duì)列database驅(qū)動(dòng)簡(jiǎn)單demo示例
這篇文章主要介紹了laravel5.6 框架郵件隊(duì)列database驅(qū)動(dòng),結(jié)合實(shí)例形式詳細(xì)分析了laravel5.6郵件隊(duì)列database驅(qū)動(dòng)具體設(shè)置、實(shí)現(xiàn)步驟與相關(guān)操作技巧,需要的朋友可以參考下2020-01-01
Laravel框架實(shí)現(xiàn)的使用smtp發(fā)送郵件功能示例
這篇文章主要介紹了Laravel框架實(shí)現(xiàn)的使用smtp發(fā)送郵件功能,結(jié)合實(shí)例形式分析了Laravel框架相關(guān)配置及郵件發(fā)送操作技巧,需要的朋友可以參考下2019-03-03

