PHP - oci_connect 未找到
PHP - oci_connect not found
我研究并发现 oci_connect() 是可行的方法。我发现我可以使用 tnsnames.ora 文件中的连接名称或使用简单的连接语法。由于我的数据库不是本地存储的,而且我不知道所说的 tnsnames.ora 文件位于 apex.oracle.com 中的什么位置,所以我使用了简单的连接 strings.Here,这是我所做的远的。
$username = "myemail";
$host = "apex.oracle.com";
$dbname = "name";
$password = "password";
// url = username@host/db_name
$dburl = $username . "@".$host."/".$dbname;
$conn = oci_connect ($username, $password, $dburl);
if(!$conn) echo "Connection failed";
我得到一个
Call to undefined function oci_connect()
那么怎么走?
更新 1:
这是我做过的事情的清单:
已安装 Oracle 数据库
解压 Oracle 实例客户端
设置环境变量
取消注释 php.ini
中的扩展名=php_oci8_12c.dll
已将实例客户端文件夹中的所有 *.dll 文件复制到 xampp/php 和 xampp/apache/bin
还确保 php/ext 文件夹具有所需的 dll。
那是昨晚。我已经多次重启我的电脑,APACHE 和它一起,但我仍然收到这个错误:
Call to undefined function oci_connect()
此时我很沮丧,不知道该何去何从。 PHP 似乎 link 达不到 oci8。我可以通过 'sqlplus' 命令和一些 select 语句在 cmd 中查看我从数据库配置助手创建的数据库。所以一切似乎都设置正确,只是 php 在尝试使用 oci_connect()
时遇到问题。
我的 database.php,现在设置为:
public function __construct()
{
error_reporting(E_ALL);
if (function_exists("oci_connect")) {
echo "oci_connect found\n";
} else {
echo "oci_connect not found\n";
exit;
}
$host = 'localhost';
$port = '1521';
// Oracle service name (instance)
$db_name = 'haatbazaar';
$db_username = "SYSTEM";
$db_password = "root";
$tns = "(DESCRIPTION =
(CONNECT_TIMEOUT=3)(RETRY_COUNT=0)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = $host)(PORT = $port))
)
(CONNECT_DATA =
(SERVICE_NAME = $db_name)
)
)";
$tns = "$host:$port/$db_name";
try {
$conn = oci_connect($db_username, $db_password, $tns);
if (!$conn) {
$e = oci_error();
throw new Exception($e['message']);
}
echo "Connection OK\n";
$stid = oci_parse($conn, 'SELECT * FROM ALL_TABLES');
if (!$stid) {
$e = oci_error($conn);
throw new Exception($e['message']);
}
// Perform the logic of the query
$r = oci_execute($stid);
if (!$r) {
$e = oci_error($stid);
throw new Exception($e['message']);
}
// Fetch the results of the query
while ($row = oci_fetch_array($stid, OCI_ASSOC + OCI_RETURN_NULLS)) {
$row = array_change_key_case($row, CASE_LOWER);
print_r($row);
break;
}
// Close statement
oci_free_statement($stid);
// Disconnect
oci_close($conn);
}
catch (Exception $e) {
print_r($e);
}
}
它输出:
oci_connect not found
OCI8 列在我的phpInfo().
首先,这个问题之前有人问过,但是。对不起。您只能通过 Web 界面与其交互。
其次,如果您确实找到要连接的远程 Oracle 数据库,则需要安装 Oracle Instant Client for your OS, and configure the PHP OCI8 extension。
好吧,我找到了这整个苦难背后的罪魁祸首。我已经设置了 PATH
环境变量,但显然忘记添加一个名为 TNS_ADMIN
的新系统环境变量并将目录设置为 PATH/TO/INSTANCE/CLIENT
。
这是您需要添加的系统环境变量列表:
- 编辑
PATH
系统变量并添加$ORACLE_HOME/bin
目录
- 编辑
PATH
系统变量并添加实例客户端目录
- 添加新的系统变量,命名为
TNS_ADMIN
并添加实例客户端目录
我希望这对那些来看的人有所帮助。
我研究并发现 oci_connect() 是可行的方法。我发现我可以使用 tnsnames.ora 文件中的连接名称或使用简单的连接语法。由于我的数据库不是本地存储的,而且我不知道所说的 tnsnames.ora 文件位于 apex.oracle.com 中的什么位置,所以我使用了简单的连接 strings.Here,这是我所做的远的。
$username = "myemail";
$host = "apex.oracle.com";
$dbname = "name";
$password = "password";
// url = username@host/db_name
$dburl = $username . "@".$host."/".$dbname;
$conn = oci_connect ($username, $password, $dburl);
if(!$conn) echo "Connection failed";
我得到一个
Call to undefined function oci_connect()
那么怎么走?
更新 1:
这是我做过的事情的清单:
已安装 Oracle 数据库
解压 Oracle 实例客户端
设置环境变量
取消注释 php.ini
中的扩展名=php_oci8_12c.dll
已将实例客户端文件夹中的所有 *.dll 文件复制到 xampp/php 和 xampp/apache/bin
还确保 php/ext 文件夹具有所需的 dll。
那是昨晚。我已经多次重启我的电脑,APACHE 和它一起,但我仍然收到这个错误:
Call to undefined function oci_connect()
此时我很沮丧,不知道该何去何从。 PHP 似乎 link 达不到 oci8。我可以通过 'sqlplus' 命令和一些 select 语句在 cmd 中查看我从数据库配置助手创建的数据库。所以一切似乎都设置正确,只是 php 在尝试使用 oci_connect()
时遇到问题。
我的 database.php,现在设置为:
public function __construct()
{
error_reporting(E_ALL);
if (function_exists("oci_connect")) {
echo "oci_connect found\n";
} else {
echo "oci_connect not found\n";
exit;
}
$host = 'localhost';
$port = '1521';
// Oracle service name (instance)
$db_name = 'haatbazaar';
$db_username = "SYSTEM";
$db_password = "root";
$tns = "(DESCRIPTION =
(CONNECT_TIMEOUT=3)(RETRY_COUNT=0)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = $host)(PORT = $port))
)
(CONNECT_DATA =
(SERVICE_NAME = $db_name)
)
)";
$tns = "$host:$port/$db_name";
try {
$conn = oci_connect($db_username, $db_password, $tns);
if (!$conn) {
$e = oci_error();
throw new Exception($e['message']);
}
echo "Connection OK\n";
$stid = oci_parse($conn, 'SELECT * FROM ALL_TABLES');
if (!$stid) {
$e = oci_error($conn);
throw new Exception($e['message']);
}
// Perform the logic of the query
$r = oci_execute($stid);
if (!$r) {
$e = oci_error($stid);
throw new Exception($e['message']);
}
// Fetch the results of the query
while ($row = oci_fetch_array($stid, OCI_ASSOC + OCI_RETURN_NULLS)) {
$row = array_change_key_case($row, CASE_LOWER);
print_r($row);
break;
}
// Close statement
oci_free_statement($stid);
// Disconnect
oci_close($conn);
}
catch (Exception $e) {
print_r($e);
}
}
它输出:
oci_connect not found
OCI8 列在我的phpInfo().
首先,这个问题之前有人问过,但是
其次,如果您确实找到要连接的远程 Oracle 数据库,则需要安装 Oracle Instant Client for your OS, and configure the PHP OCI8 extension。
好吧,我找到了这整个苦难背后的罪魁祸首。我已经设置了 PATH
环境变量,但显然忘记添加一个名为 TNS_ADMIN
的新系统环境变量并将目录设置为 PATH/TO/INSTANCE/CLIENT
。
这是您需要添加的系统环境变量列表:
- 编辑
PATH
系统变量并添加$ORACLE_HOME/bin
目录 - 编辑
PATH
系统变量并添加实例客户端目录 - 添加新的系统变量,命名为
TNS_ADMIN
并添加实例客户端目录
我希望这对那些来看的人有所帮助。