Oracle 环境变量
oci8 扩展始终需要查找 Oracle 库和消息文件。找不到正确的文件将导致 PHP 返回 Oracle“ORA-12705:Cannot Access NLS data files or invalid environment specified”。如果存在多个 Oracle 安装,则可能发生冲突。ZCO 包含它自己的 Oracle 即时客户端本地副本,该副本包含 Oracle 库和消息,因此您不会看到该错误。
NLS_LANG(全球化)和 TNS_ADMIN(网络)变量通常是 ZCO 所必需的。
必须设置启动 Apache 的环境中的环境变量,以便 oci8 扩展在首次加载时可以访问这些值。在 PHP 脚本中不要使用 putenv() 设置环境变量。所有 oci8 函数的反映并不一致。它肯定不可移植。
ZCO 修改了 apachectl,添加了 LD_LIBRARY_PATH。(如果 Oracle 提供了以不同方式链接的即时客户端,则未来版本的 ZCO 可能不需要该操作)。这使得可以重用 ZCO GUI 控制台来启动 Apache。
您可能需要使用 ZCO 的 TNS_ADMIN 和 NLS_LANG 执行类似操作,或者如果您手动启动 Apache,则在调用脚本中设置环境:
#!/bin/sh
TNS_ADMIN=/usr/local/apache/conf export TNS_ADMIN echo Starting Apache #export > /tmp/envvars
/usr/local/apache/bin/apachectl start
该示例假设 /usr/local/apache/conf/tnsnames.ora 存在。TNS_ADMIN 指向包含 tnsnames.ora 文件的目录。
关闭连接
在每个脚本结束时,将自动关闭使用 oci_connect() 或 oci_new_connect() 打开的连接。您也可以调用以下代码来显式关闭连接:
oci_close($c);
将回滚任何未提交的数据。
如果长时间运行的脚本只用少量时间与数据库交互,则您可能要关闭连接以将资源释放给其他数据库用户使用。
oci_close() 无法关闭使用 oci_pconnect() 打开的连接。这与持久资源在其他 PHP 扩展中的
工作方式类似。
Oci_close() 通过引用计数起作用。仅当完成所有连接引用时,才会实际关闭连接。在本示例中,$c1 和 $c2 是一个连接,但仅当脚本结束时,才会关闭数据库连接。
$c1 = oci_connect('hr', 'hrpw', '//localhost/XE'); $c2 = oci_connect('hr', 'hrpw', '//localhost/XE'); do_query($c1, 'select user from dual'); oci_close($c1);
do_query($c1, 'select user from dual'); do_query($c2, 'select user from dual'); oci_close($c2);
在重构 oci8 之前,oci_close() 函数是一个无操作函数。即使在需要的情况下,您也无法显式关闭连接。现在,这种情况发生了变化,但您可以在必要时通过在
[Oracle]特别版和Zend Core for Oracle (1)
Tech.acnow.net 2006-5-4 12:53:45
网络 PHP.ini 中设置 oci8.old_oci_close_semantics 来恢复为旧行为。将
oci8.old_oci_close_semantics 设置为 1 可以使 oci_close() 再次成为无操作函数。默认值 0 表示 oci_close() 将关闭连接。
执行语句
oci8 中的查询遵循 Oracle 中
常用的模型:分析、执行和获取。类似 CREATE 和 INSERT 这样的语句只需分析和执行。如今,分析实际上只是一个“准备”步骤,这是因为 Oracle 的实际分析操作会在执行阶段执行。
您可以像在字符串中使用“%s”打印格式指示符那样选择将局部变量“绑定”到语句中。这样做可以提高性能和安全性。
您也可以“定义”将结果存储到的位置。大多数用户让 oci8 fetch 函数执行该操作。
可能的步骤包括:
分析 - 准备一个要执行的语句
绑定 - 可以有选择地让您绑定数据值(例如,在 WHERE 子句中)以便提高性能和安全性
定义 - 一个可选步骤,使您可以指定哪些 PHP 变量将保存结果。(不常见?) 执行 - 数据库处理该命令并缓冲结果。
获取 - 从数据库中取回查询结果。Oci8 提供了一些可供选择的获取语句。 没有哪个 PHP 函数调用可以一次性执行以上所有操作,但在应用
程序中创建一个这样的函数也不难,它还允许您添加自定义的错误处理要求。
查询 以下是 oci8 中的一个基本查