我收到了这个错误。
Fatal error: Call to undefined function oci_connect()
$conn = oci_connect('localhost', 'username', 'password') or die(could not connect:'.oci_error)
这就是代码。
这是我得到的错误。
Fatal error: Call to undefined function oci_connect() in C:\xampp\htdocs\org\org\php\myphp.php on line 51
我检查了ext文件夹中的PHP DLL文件。
有人提前感谢此人提供帮助。
答案 0 :(得分:15)
我只花了三个星期来对抗这个问题。
我在Windows 7中使用了我的ORACLE连接,没问题。上周我刚买了一台装有Windows 8的新电脑。安装XAMPP 1.8.2。这台服务器上的每个应用程序PHP / MySQL都运行正常。当我尝试将我的php应用程序连接到Oracle DB时出现问题。
调用未定义的函数oci_pconnect()
当我通过更改启动/停止Apache时,“PHP启动”上的一个奇怪的“警告”转到LOG“PHP警告:PHP启动:在第0行的未知”
我做了所有事情(取消注释了php_oci8.dll和php_oci8_11g.dll,将oci.dll复制到/ ext目录,靠近/ Apache并且没有工作。下载每个版本的Instant Client和NOTHING。
上帝来到我的帮助之下。当我下载ORACLE Instant Client 32位时,一切正常。 phpinfo()显示oci8信息,我的应用程序工作正常。
所以,从来没有想过你的WINDOWS版本是x64。该链接位于XAMPP和ORACLE Instant Client之间。
答案 1 :(得分:6)
简单步骤
您需要在php.ini
中启用以下扩展名;extension=php_oci8.dll
;extension=php_oci8_11.g.dll
删除“;”以便结果如下:
extension=php_oci8.dll
extension=php_oci8_11.g.dll
下载Oracle Instant Client: - 最好是32位。 32位也可以在64位上运行。你可以只谷歌:下载oracle即时客户端窗口32位。使用客户端版本11,因为extension=php_oci8_11.g.dll
无法使用.12。将包解压缩到C:\Oracle\instantclient_11_2
等位置。
最后使用结束位置修改系统的PATH
环境变量,在系统变量而不是用户变量下
然后,您需要重新启动系统以使PATH
更改完全传播。
如果您只是重新启动XAMPP / WAMP而不重新启动计算机,则不会加载(也未找到)客户端的DLL文件(即OCL.dll)
通过PHP的php_oci8_11g.dll
扩展名。
答案 2 :(得分:4)
确保事项
将其粘贴到C:\ instantclient_12_1
答案 3 :(得分:3)
您需要在php.ini文件中启用该扩展名。见Oracle Installation:
extension=oci8.so
答案 4 :(得分:3)
我安装了WAMPServer 2.5(32位)并且还遇到了oci_connect错误。我还安装了Oracle 11g客户端(32位)。我在其他帖子中读到的常见修复是更改C:\ wamp \ bin \ php \ php5.5.12目录中的php.ini文件,但这对我来说无效。也许我误解了,但我发现如果你改变C:\ wamp \ bin \ apache \ apache2.4.9目录中的php.ini文件,你会得到你想要的结果。我在apache php.ini文件中唯一改变的是删除分号到b
以启用它。然后我重新启动了所有服务,它现在可以工作了!我希望这适合你。
答案 5 :(得分:1)
好的,伙计们。
首先,使用
<?php
phpinfo();
?>
并确定您的PHP版本(位于最顶部,例如7.0.xxx) 还有您的PHP版本架构:x64或x86 以及线程安全或线程不安全(在第一张表中为“线程安全”。)“禁用”显然意味着“线程不安全”。
以下三个软件绝对是至关重要的:
如果以下任何一种用于不同的体系结构,非线程安全/线程安全版本,PHP主版本号或数据库版本,则会出现错误:
1. PHP for Windows
2. OCI8 PECL Drivers for PHP (https://pecl.php.net/package/oci8)
3. Oracle Instant Client
请记住:如果要连接到11g Oracle实例,则需要一个11g驱动程序。
第二,安装正确的PHP,OCI8 PECL驱动程序和即时客户端。
我选择:
d:\php\ for php
d:\oci\ for instant client
unzip the contents of the OCI8 PECL Driver into d:\php\ext\
第三,根据Oracle提供的说明修改d:\ php \ php.ini:
1. set the extension directory
2. set only one of the following:
a. for 11g drivers, use extension=php_oci8_11g.dll
b. for 12c drivers, use extension=php_oci8_12c.dll
c. for other oracle DB drivers, use the correct oracle extension.
第四:将d:\ oci \(或任何即时客户端安装位置)添加到系统PATH。
第五:重新启动PC。
第六,在命令提示符下,键入“ where oci *”,并验证是否存在oci.dll的Instant Client安装路径版本。
第七名,转到d:\ php \并键入“ php -m”,您应该会在列表中看到OCI8。
如果在键入“ php -m”后在模块列表中没有看到OCI8,请打开d:\ php \ errorlog.txt
如果您看到类似这样的内容:
PHP Warning: PHP Startup: Unable to load dynamic library 'ext\php_oci8_11g.dll' - %1 is not a valid Win32 application.
然后,即时客户端或PECL驱动程序下载与您的PHP版本的体系结构不同。
如果您看到类似这样的内容:
PHP Warning: PHP Startup: Unable to load dynamic library 'ext\php_oci8_12c.dll' - The specified procedure could not be found.
然后您为即时客户端版本使用了错误的OCI8 PECL驱动程序。
希望这会有所帮助。
答案 6 :(得分:0)
我安装了Wamp&amp;期望一切都能开箱即用。不是这样。 我的x64 Windows机器上有2个Oracle客户端(即时和完整)。如果其他人有类似的设置,诀窍是确保即时客户端是(a)在您的Path环境变量中,(b)在Path变量中的完整客户端之前。在Windows here上有一个非常简短的部分,但它给出了答案。
答案 7 :(得分:0)
如果任何人在生命的某个阶段面临这个问题,那么这就是我的故事:
XAMPP 32位,PHP 7.1.6
干杯
答案 8 :(得分:0)
尝试
在php.ini文件中取消注释
ith
“删除分号”
答案 9 :(得分:0)
我遇到了同样的问题,this page上的解决方案帮助了我,这是由于使用了不兼容的oci ddl文件造成的。
希望有帮助。
答案 10 :(得分:0)
答案 11 :(得分:0)
使用OCI8扩展名访问Oracle数据库。因此,请从1 https://pecl.php.net/package/oci8/2.0.8/windows下载php_oci8.dll。 (5.6 Thread Safe(TS)x86)php_oci8.dll必须与您的php版本相同。然后解压缩它,您将发现
1.php_oci8.dll
2.php_oci8_11g.dll(根据您的oralce版本)将这两个文件粘贴到您的
(xampp \ php \ ext)文件夹。
打开您的php.ini文件并将其添加 扩展名= php_oci8.dll extension = php_oci8_11g.dll
使用这些命令检查您的oracle版本和服务名称
显示参数service_name; service_name是orcl(您应该记住此服务名称)
下载Instantclient_11_1后,将其解压缩,然后粘贴到本地磁盘中。并复制路径C:\ instantclient_11_1,然后将此路径设置为用户变量和系统变量。请注意,我的代码无需设置路径变量即可正常工作。
打开您的cmd并输入SQL,按照以下命令创建架构
授予连接,资源为dbname;
创建表user_info并将数据插入到表中并提交。 注意:您必须提交数据或未插入数据。
<html>
<head><title>Oracle demo</title></head>
<body>
<?php
// Create connection to Oracle
$conn = oci_connect("dbname", "pass123", "//localhost/orcl"); // orcl is your service_name
$query = 'select * from user_info';
$stid = oci_parse($conn, $query);
$r = oci_execute($stid);
// Fetch each row in an associative array
print '<table border="1">';
while ($row = oci_fetch_array($stid, OCI_RETURN_NULLS+OCI_ASSOC)) {
print '<tr>';
foreach ($row as $item) {
print '<td>'.($item !== null ? htmlentities($item, ENT_QUOTES) : ' ').'</td>';
}
print '</tr>';
}
print '</table>';
答案 12 :(得分:0)
从用于Microsoft Windows(x64)的Instant Client下载并将以下文件提取到“ c:\ oracle”:
instantclient-basic-windows.x64-12.1.0.2.0.zip
instantclient-sqlplus-windows.x64-12.1.0.2.0.zip
instantclient-sdk-windows.x64-12.1.0.2.0.zip 这将创建以下文件夹“ C:\ Oracle \ instantclient_12_1”。
最后,将“ C:\ Oracle \ instantclient_12_1”文件夹添加到PATH环境变量中,并将其放在最左侧。
然后重新启动服务器。
答案 13 :(得分:0)
1 - 第一步是通过检查 phpinfo 中的 PHP 详细信息,为您的 xampp 或 wampp 或 lampp 安装确定正确的即时客户端。创建一个简单的 php 文件并添加以下代码并在浏览器上预览。
<?php
phpinfo();
?>
2 - 转到 https://www.oracle.com/database/technologies/instant-client/downloads.html 并为您的架构(32 位或 64 位)下载正确的即时客户端(基础包和 sdk)
Instant client package - basic
3 - 将 Instantclient 解压缩到您的首选目录并将路径添加到您的环境变量中。
4 - 转到 php.ini 并通过删除该行开头的 oci8
来启用 ;
扩展。
寻找这一行
;extension=php_oci8_12c.dll ; Use with Oracle Database 12c Instant Client
重构为
extension=php_oci8_12c.dll ; Use with Oracle Database 12c Instant Client
5 - 重启你的电脑
6 - 检查您的 phpinfo(您在第 1 步中创建的页面)。您应该会看到以下详细信息:
答案 14 :(得分:-3)
为Oracle数据库设置NLS_LANG环境变量(By - Jaydev) 请按照此过程为Oracle数据库设置NLS_LANG环境变量。 为Oracle数据库设置NLS LANG环境变量