【发布时间】:2010-09-10 09:47:10
【问题描述】:
如何在 MAC OS X 上使用 PHP 连接到 Oracle?
【问题讨论】:
如何在 MAC OS X 上使用 PHP 连接到 Oracle?
【问题讨论】:
对于 osx 10.6 64bit 上的 Instantclient,请执行以下操作:
下载即时客户端库和 sdk,将它们全部放在一个文件夹中。如果您在 64 位机器上,请确保获得 64 位库,32 位将无法工作! - 先用sqlplus测试
如果不存在则创建它
sudo vi /etc/launchd.conf
并添加到文件中(使用您自己的路径!)
setenv DYLD_LIBRARY_PATH /usr/oracle_instantClient64
此时您可能需要重新启动系统,以便 launchd 将路径传递给 apache 以获取路径,或者查看重新启动 launchd 是否有效,尽管我感觉无论如何都会重新启动系统!
您应该在 php.ini 中添加“extension=oci8.so”
sudo vi /etc/php.ini
如果该文件不存在,则复制 php.ini.default
sudo cp /etc/php.ini.default /etc/php.ini
然后添加上面的扩展名,文件后面有一个包含很多扩展名的部分,把它放在那里
oci 需要一个库符号链接,所以这样做
sudo ln -s $DYLD_LIBRARY_PATH/libclntsh.dylib.10.1 $DYLD_LIBRARY_PATH/libclntsh.dylib
oracle 二进制文件中还有一些奇怪的硬编码库链接,因此请修复它
mkdir -p /b/227/rdbms/
它只寻找 oracle 库,所以将其链接回来
ln -s /usr/oracle_instantClient64/ /b/227/rdbms/lib
现在从 pear 存储库安装 oci8。如果您在未升级的情况下安装了雪豹 osx 10.6,您可能会遇到 pear 和 pecl 的问题。如果是这样,您将需要先安装 pear。见:https://discussions.apple.com/thread/2602597?start=0&tstart=0
sudo pecl install oci8
提示:不要使用自动检测,当它询问您时指定即时客户端路径..
instantclient,/usr/oracle_instantClient64
重启apache
sudo apachectl graceful
通过在浏览器中导航到 URL 进行测试,或者您可以直接在命令行中调用该文件
php index.php
就是这样 使用以下作为测试文件..
<?php
$dbHost = "localhostOrDatabaseURL";
$dbHostPort="1521";
$dbServiceName = "servicename";
$usr = "username";
$pswd = "password";
$dbConnStr = "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)
(HOST=".$dbHost.")(PORT=".$dbHostPort."))
(CONNECT_DATA=(SERVICE_NAME=".$dbServiceName.")))";
if(!$dbConn = oci_connect($usr,$pswd,$dbConnStr)){
$err = oci_error();
trigger_error('Could not establish a connection: ' . $err['message'], E_USER_ERROR);
};
$strSQL = "SELECT SYSDATE FROM DUAL";
$stmt = oci_parse($dbConn,$strSQL);
if ( ! oci_execute($stmt) ){
$err = oci_error($stmt);
trigger_error('Query failed: ' . $err['message'], E_USER_ERROR);
};
while(oci_fetch($stmt)){
$rslt = oci_result($stmt, 1); print "<h3>query returned: ".$rslt."</h3>";
}
?>
【讨论】:
PDO 抽象层可用于连接到 Oracle DB 并在其上执行操作。这是来自 Oracle 网站的article,关于如何将 PDO 与 Oracle 一起使用。
也可以使用OCI。
Oracle PHP Development Centre 将提供更多有关同时使用 Oracle 和 PHP 的有用信息。
【讨论】:
使用oci-interface连接oracle数据库应该没有问题,例如使用“oci_connect()”。
更多示例如下: http://php.net/manual/en/oci8.setup.php
但我不明白,MAC OS X 这句话是什么意思 - 你是在本地运行 apache 吗?
希望这会有所帮助, 巴斯蒂安
【讨论】:
我不知道具体的Mac,也不知道PHP,但是你通常需要安装Oracle 客户端工具(Instant Client)。
http://www.oracle.com/technology/tech/oci/instantclient/index.html
安装后,您修改 TNSNAMES.ORA 文件以指向 Oracle 数据库的服务器和实例名称。
然后你可以使用 PHP “数据库连接”的东西(对不起)来创建一个连接并运行你的 SQL 语句。
使用 SQL*PLUS 客户端检查连接是否正常:
即。
c:> SQLPLUS
CONNECT scott/tiger@mydatabase
如果 TNSNAMES.ORA 正确,您应该获得连接,或者至少“用户名/密码不正确”证明您已与 Oracle 实例通信。
如果您收到 TNS-12521 (?) 错误,则您的 TNSNAMES.ORA 不正确。
【讨论】:
我认为 OCI 将是可行的方法。 PHP 有一个module。
【讨论】: