我是php的新手,但我已经在我的Mac上运行(php 5.3.3)(OS 10.6)。但是,当我尝试运行此脚本时:
<?php // Create connection to Oracle
$conn = oci_connect("user", "pass", "tnsnames.ora");
if (!$conn) {
$m = oci_error();
echo $m['message'], "\n";
exit;
}
else {
print "Connected to Oracle!";
}
// Close the Oracle connection
oci_close($conn);
?>
我收到错误:“致命错误:调用未定义的函数oci_connect()......”
现在,我已经检查了oracle的网站并下载了他们的即时客户端,但我对下一步该做什么感到困惑。他们的指示是:</ p>
在非Windows平台上重建PHP 使用以下配置 选项: --with-OCI8 =共享,instantclient,/路径/到/即时/客户端/库 编辑您的php.ini文件并添加: extension = oci8.so确保你的 extension_dir参数(在php.ini中) 指向oci8.so的位置 安装。设置环境 Oracle要求的变量,例如 PATH(Windows)或LD_LIBRARY_PATH(打开 Linux)重启你的网络服务器。
但是有人可以用更简单的语言向我解释这个问题吗?我真的很困惑。我在即时客户端文件夹中找不到oci8.so文件,我不知道在文件中放置extention = oci8.so(我所有的都是php.ini-production和php.ini-development我不知道如何用配置选项“重建”PHP。
哦,我也不知道如何拉入tnsnames.org文件。这是正确的方法吗?由于我还没有连接,我不知道这是否失败。
答案 0 :(得分:1)
你不想要文件名&#34; tnsnames.ora&#34;在你的oci_connect调用中。您需要tnsnames.ora文件中的数据库连接别名的名称。 tnsnames.ora文件包含已知数据库连接的列表,由别名标识。对于名为&#34; db_alias&#34;的数据库别名,您将使用此调用:
$conn = oci_connect("user", "pass", "db_alias");
典型的tnsnames.ora条目看起来像这样:
DB_NAME =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = foo.bar.com)(PORT = 1521))
(CONNECT_DATA = (SERVICE = some_db_service_name))
)
或者,您可以使用Easy Connect字符串:
$conn = oci_connect("user", "pass", "//host:port/db_service_name");
其中host,port和db_service_name将替换为您环境中的值。所以,对于主持人&#34; foo&#34;与数据库&#34; bar&#34;在标准端口1521上,您的连接将如下所示:
$conn = oci_connect("user", "pass", "//foo:1521/bar");
有关详细信息,请查看manual page for oci_connect。
答案 1 :(得分:0)
我使用完整的连接字符串:
$rnum=rand(0,99999999);
$connect_str = "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) (HOST = $dbserver) (PORT = $dbport) (HASH = '.$rnum.') ) (CONNECT_DATA =(SID = $dbname)) )";
$DB = oci_connect($dbuser, $dbpass, $connect_str);
对我来说就像是一种魅力。