问题标签 [oci8]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - Oracle全局临时表/PHP交互题
我从未使用过全局临时表,但是我有一些疑问,它们将如何在 php 环境中工作。
数据如何共享:假设使用 oci8 通过 php 持久连接到 oracle。数据是否与数据库 ID 相关联?它是基于 Apache httpd 恶魔完成的吗?还是每个单独的请求都是独一无二的?
会话的数据何时从全局临时表中清除?我假设(或者更确切地说希望)它在 php 脚本退出时完成。或者,如果不是,我假设我需要在脚本退出之前将其删除。
php - 使用 OCI 在 PHP 中返回“DESC 包”
您好我正在尝试使用 OCI8 直接从 PHP 获取有关 Oracle 包的信息:
这返回:
我知道该命令在我在 SQLPlus 中尝试时有效。
有谁知道如何实现这一目标。
谢谢
php - oci_parse 的返回值
if 的条件是什么,我想在 if 中执行一些命令,如果查询没有返回行。
php - 使用 Oracle、PHP 和 Oci8 处理 eacute 和其他特殊字符
您好我正在尝试将名称存储到 Oracle 数据库中并使用 PHP 和 oci8 取回它们。
但是,如果我将其é
直接插入 Oracle 数据库并使用 oci8 将其取回,我只会收到一个e
在插入数据库之前,我是否必须将所有特殊字符(包括é
)编码为 html 实体(即:é
)......或者我错过了什么?
谢谢
更新:3 月 1 日 18:40
找到这个函数: http ://www.php.net/manual/en/function.utf8-decode.php#85034
似乎工作,虽然不确定它是否是最佳解决方案
更新:3 月 8 日 15:45
Oracle 的字符集是 ISO-8859-1。
在 PHP 中我添加了:
强制 oci8 连接使用该字符集。从 PHP 中检索é
using oci8 现在可以了!(对于varchars
,但CLOBs
不必utf8_encode
提取它)
所以然后我尝试将数据从 PHP 保存到 Oracle ......它不起作用......从 PHP 到 Oracle 的某个地方é
变成了一个?
更新:3 月 9 日 14:47
于是越来越近。添加 NLS_LANG 变量后,直接进行 oci8 插入即可é
。
问题实际上出在 PHP 方面。通过使用 ExtJs 框架,在提交表单时,它使用encodeURIComponent
.
所以é
被发送%C3%A9
,然后重新编码成é
.
但是它的长度现在是2 (strlen($my_sent_value) = 2)
而不是 1。如果在 PHP 中我尝试: $my_sent_value == é
= FALSE
我想如果我能够将 PHP 中的所有这些字符重新编码回字节大小为 1 的长度,然后将它们插入 Oracle,它应该可以工作。
虽然仍然没有运气
更新:3 月 10 日 11:05
我一直在想我是如此接近(但如此遥远)。
putenv("NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P9");
工作非常零星。
我创建了一个小的 php 脚本来测试:
运行一次并直接登录到 Oracle 数据库后,我看到 STRING_FIELD 设置为|¿|
. 显然不是我从以前的经历中所期望的。
但是,如果我快速刷新该 PHP 页面两次....它工作!
在 Oracle 中,我正确地看到了|é|
.
似乎环境变量在第一次执行脚本时没有正确设置或发送,但可用于第二次执行。
我的下一个实验是将变量导出到 PHP 的环境中,但是,我需要为此重置 Apache……所以我们将看看会发生什么,希望它可以工作。
php - PHP中的oci_connect空白页
更新(2010 年 5 月 21 日)成功!
所以在 MUCH $head->desk()'ing 之后,我已经解决了。
请记住孩子们,请注意您使用的即时客户端版本,具体取决于虚拟化设置!
我一直在安装通用的 Instant Client(不知道我们的 ESX 服务器安装在 AMD 处理器上,而不是 Intel)并且在内部运行良好(CentOS 安装是 32 位,因为我们的内部 ESXi 服务器不是 64 位)。好吧,瞧瞧,即使您在 AMD64 上的虚拟化服务器上运行 32 位安装,安装什么即时客户端仍然很重要。
这是我想检查的最后一件事,但看起来,现在一切都运行良好。
我要感谢所有帮助我完成所有可能的测试以弄清楚这一点的人,但最后,我没有意识到虚拟化的差异是我的错。
更新(2010 年 5 月 21 日) 当我在内部将它安装在新的虚拟机上时,我认为这个错误已经逃脱了我,但我现在发现了一个缩小链接。
当我发布这个时,我试图在我们的生产服务器上安装它。在一周没有进展并且需要重新开始开发之后,我在我们的内部服务器上为 VM 配备了全新安装的 Crap...CentOS,以及全新安装的即时客户端和 oci8。
工作完美。
但是,我们只是将虚拟机的精确副本上传到我们的生产服务器,它神奇地不再起作用。尝试重新安装一切,无济于事。
所以我唯一可以缩小范围是防火墙问题(尽管我在尝试 127.0.0.1 时遇到了同样的问题)或者可能是 ESX(我们的生产服务器)服务器问题,内部服务器正在运行 ESXi。
有什么想法吗?
更新 (3/8/2010)我安装了 Xdebug 并让它跟踪我的代码。这是我得到的输出:
跟踪在该点停止。
我已经在本地服务器上以相同的方式安装了所有东西,并且工作正常。要说我完全不知所措,那就轻描淡写了。
*注意:我运行 make test 并且每次测试都返回 FAIL。我从来没有在我的工作机器上运行它来查看它是否报告了相同的错误。知道为什么 make test 会报告 FAIL 但 make 不报告任何错误吗?
我已经安装了没有报告错误的 Oracle Instantclient 以及 OCI8 PECL 包并且不知所措。每当我尝试使用 oci_connect 打开连接时,它都会停止我的整个 PHP 脚本。
例子:
返回一个完整的空白页。该模块已加载(在 phpinfo 中可见),并且所有内容都已安装且没有错误。
我完全不知所措。
中央操作系统:5.4
阿帕奇:2.2.3
PHP: 5.3.1
即时客户端:11.2
oci8:1.4.1
有什么想法吗?
笔记
Apache 错误日志不报告任何内容
尝试调试:
1:
回报:
2:
将主机更改为//主机
回报:
同样的错误
php - apache 使用 php5 运行时找不到 OCI8 函数
我正在尝试为我的数据库类中的项目设置服务器。我将用 php 编写项目,通过 apache 部署它,并连接到远程 oracle 服务器。我在使用 oracle 连接部分时遇到问题。我安装了 OCI8 模块和 oracle 的 Instantclient 版本 10.2。我认为它正在工作,因为当我从控制台运行以下程序时,我得到了正确的输出。
程序:
结果:
<table border='1'>
<tr>
<td>1</td>
<td>wrench</td>
<td>silver</td>
</tr>
<tr>
<td>2</td>
<td>hammer</td>
<td>brown</td>
</tr>
</table>
所以我认为一切都很好。但是当我在浏览器中访问同一个 php 页面时,我收到以下错误消息:
Fatal error: Call to undefined function oci_connect() in /home/eric/apache2/htdocs/realestate/basicQuery.php on line 2
我认为这可能意味着命令行和 apache 中使用了两个不同版本的 php,所以我运行了 phpinfo(); 对彼此而言。但是他们都返回了相同的 php 信息(PHP 版本 5.2.10-2ubuntu6.4)。它们使用不同的 php.ini 文件(/etc/php5/apache2/php.ini 和 /etc/php5/cli/php.ini),但它们完全相同。我不知道在哪里可以寻找在一种环境与另一种环境中可能不同的任何东西。
谢谢你的帮助!
ruby - 我如何需要特定版本的 ruby gem?
具体来说,ruby-oci8 gem。我安装了 1.0.7 和 2.0.4。我想要 1.0.7。
我可以只需要 oci8,但我没有得到我想要的版本。
我可以要求使用文件的完整路径,它可以工作,但不能移植:
我可以使用 gem 命令来询问我想要的版本,但它似乎并没有实际加载库:
如果要加载库,我肯定会支持最后一种方法,而不仅仅是确认它存在于我的系统上。我错过了什么?
php - PHP/5.3.2 中的 OCI8 扩展在哪里?
我正在部署一个使用 OCI8 函数连接到 Oracle 9i 服务器的 PHP 应用程序。我已经安装了最新的 Windows 官方二进制文件 (PHP/5.3.2),以便将其作为 Apache 2.2 模块(即 VB6+ts MSI 安装程序)运行。但是,OCI8 扩展不再出现在扩展列表中:唯一可供选择的选项是Oracle (10)
和Oracle (11g)
。
PHP 手册没有说明 OCI8 已被弃用。此外,没有对任何 Oracle 10 或 11 扩展的引用:-?
OCI8改名了吗?其他扩展是什么?
php - 我可以从匿名 PL/SQL 块向 PHP 返回值吗?
我正在使用 PHP 和 OCI8 来执行匿名 Oracle PL/SQL 代码块。有什么方法可以让我绑定一个变量并在块完成后获取它的输出,就像我以类似方式调用存储过程一样?
php - 为什么 PHP 的 OCI8/Oracle oci_bind_array_by_name 对我不起作用?
我正在尝试将 php 变量绑定到 pl/sql 数组。当我手动执行它并设置绑定时,pl/sql 过程工作正常,所以我知道这不是问题。这oci_bind_array_by_name
就是导致问题的原因。
我在下面调用oci_bind_array_by_name
函数的 PHP 代码中收到以下错误消息:
我很困惑,因为我实际上根据文档在函数调用中提供了最大长度(250):
http://php.net/manual/en/function.oci-bind-array-by-name.php 我使用的是 PHP 5.1.6
这是相关的PHP代码:
我在包中定义了一个数组类型: