2017-06-06 30 views
-1

最近幾天我一直在努力讓PHP連接到oracle數據庫。我一直使用安裝在窗口機器上的MAMP堆棧(它可用於Windows並確保爲我們團隊制定統一的開發堆棧)。經過與OCI8安裝相關的常見問題的努力後,我終於用phpinfo()顯示以下信息OCI8 PHP info section即使function_exists('oci_connect')返回true,爲什麼oci_connect()會拋出一個「未定義的函數」異常?

我也可以看到它是使用php -m命令安裝的模塊,使用PHP的OCI8 --ri命令,可以找到從 Oracle即時客戶端使用已安裝的DLL文件,其中OCI *

這似乎是安裝和我有一個鏈接到即時客戶端文件夾的路徑變量。除了在MAMP日誌文件中調用未定義的函數之外,沒有任何錯誤。

我有沒有設置ORACLE_HOME,TNS_ADMIN或其他Oracle變量與即時客戶端庫(我的理解)

我已經註釋掉了的extension_dir線和延長= php_oci8_12c.dll在不需要這些php.ini文件並確認我一直在編輯正確的文件。

我已經在index.php文件進行了簡單的PHP腳本包含以下行

<?php 
    If(function_exists('oci_connect')){ 
     echo 'oci_connect exists'; 
     $conn = oci_connect(); 
    } 
?> 

這是一個簡單的測試,應該給我一個警告抱怨參數不當但是腳本的輸出

oci_connect exists Fatal error: Uncaught Error: Call to undefined function oci_connect() in C:\MAMP\htdocs\Oracle_Connection\index.php:16 Stack trace: #0 {main} thrown in C:\MAMP\htdocs\Oracle_Connection\index.php on line 16

我已經用完了就什麼可能是錯誤的想法,沒有任何文件的參照設立OCI8功能似乎遇到了這個問題。

任何幫助將受到歡迎。 感謝

從CMD

C:\Users\geoff>php -m 
[PHP Modules] 
bcmath 
calendar 
com_dotnet 
Core 
ctype 
date 
dom 
filter 
hash 
iconv 
json 
libxml 
mcrypt 
mysqlnd 
oci8 
odbc 
openssl 
pcre 
PDO 
pdo_mysql 
Phar 
Reflection 
session 
SimpleXML 
soap 
sockets 
SPL 
standard 
tidy 
tokenizer 
wddx 
xml 
xmlreader 
xmlwriter 
zip 
zlib 
[Zend Modules] 

C:\Users\geoff>php function_exists 
Could not open input file: function_exists 

C:\Users\geoff>php --ri oci8 

oci8 

OCI8 Support => enabled 
OCI8 DTrace Support => disabled 
OCI8 Version => 2.1.4 
Revision => $Id: 03698b2e9b50593039b7ca292b2e3cf9eaf064b9 $ 
Oracle Run-time Client Library Version => 12.2.0.1.0 
Oracle Compile-time Instant Client Version => 12.1 

Directive => Local Value => Master Value 
oci8.max_persistent => -1 => -1 
oci8.persistent_timeout => -1 => -1 
oci8.ping_interval => 60 => 60 
oci8.privileged_connect => Off => Off 
oci8.statement_cache_size => 20 => 20 
oci8.default_prefetch => 100 => 100 
oci8.old_oci_close_semantics => Off => Off 
oci8.connection_class => no value => no value 
oci8.events => Off => Off 

Statistics => 
Active Persistent Connections => 0 
Active Connections => 0 

C:\Users\geoff>where oci* 
C:\Oracle\instantclient_12_2\oci.dll 
C:\Oracle\instantclient_12_2\oci.sym 
C:\Oracle\instantclient_12_2\ocijdbc12.dll 
C:\Oracle\instantclient_12_2\ocijdbc12.sym 
C:\Oracle\instantclient_12_2\ociw32.dll 
C:\Oracle\instantclient_12_2\ociw32.sym 
+0

首先說了,歡迎SO!現在,你有沒有嘗試重新啓動服務器? 「嘗試sudo服務apache2重啓」但這不是你的問題。問題是你正在調用沒有參數的obi_connect!嘗試閱讀文檔:0)https://doc.bccnsoft.com/docs/php-docs-7-en/function.oci-connect.html –

+0

哦,我會DEFIANTLY改寫問題,後閱讀此:https ://stackoverflow.com/help/how-to-ask這樣做將會爲你節省很多來自社區的悲痛。他們可能會有時無情,靠口頭禪生活「愚蠢的問題會得到愚蠢的答案」。你的問題不是愚蠢的,但確實需要......修改。 –

+0

嘗試加載(通過瀏覽器)調用phpinfo()的PHP腳本。您可能會發現OCI8丟失。我懷疑你的Web服務器環境與命令行環境不同:可能Oracle客戶端庫不在PATH中。 –

回答

0

要調用oci_connect()不帶參數輸出。

傳遞的用戶名和密碼爲你的數據庫的功能,如documentation

+0

-1。 PHP不能這樣工作。調用不帶參數的'oci_connect'應該導致:'警告:oci_connect()需要至少2個參數,0給出在''中。這表明'oci8'模塊已經加載並正在工作,但是您在如何調用函數時犯了一個錯誤。 – timclutton

+0

沒錯,我忘記了。我剛剛刪除了答案的那一部分 –

相關問題