oracle — oci_connect не найден

Я исследовал и обнаружил, что oci_connect () — это путь. Я обнаружил, что могу использовать имя подключения из файла tnsnames.ora или использовать синтаксис easy connect. Поскольку моя база данных не хранится локально, и я понятия не имел, где находится указанный файл tnsnames.ora на apex.oracle.com, я использовал строки быстрого подключения. Вот что я сделал до сих пор.

    $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 Instance

  • Установите переменные среды

  • Раскомментировано расширение = php_oci8_12c.dll в php.ini

  • Скопировал все файлы * .dll из клиентской папки экземпляра в xampp / php и xampp / apache / bin

  • также удостоверился, что у папки php / ext есть необходимые dll.

Это было прошлой ночью. Я перезагружал свой компьютер несколько раз, APACHE с ним, но я все еще получаю эту ошибку:

    Call to undefined function oci_connect()

На данный момент я расстроен и не знаю, куда идти отсюда. Похоже, PHP просто не связывается с oci8. Я могу просмотреть базы данных, которые я сделал из Помощника по конфигурированию базы данных в cmd из команды «sqlplus», и несколько операторов select. Таким образом, все, кажется, настроено правильно, это просто 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().

0

Решение

Хорошо, я узнал виновника всего этого испытания. Я установил PATH Переменные среды, но, видимо, забыли добавить новую системную переменную среды с именем TNS_ADMIN и установите каталог в PATH/TO/INSTANCE/CLIENT,
Вот список системных переменных, которые нужно добавить:

  • редактировать PATH системная переменная и добавить $ORACLE_HOME/bin реж
  • редактировать PATH системная переменная и добавьте каталог клиента экземпляра
  • Добавьте новую системную переменную, назовите ее TNS_ADMIN и добавьте каталог клиента экземпляра

Я надеюсь, что это помогает тем, кто приходит смотреть.

1

Другие решения

Во-первых, об этом уже спрашивали, но Oracle не разрешает удаленные подключения к базе данных для их бесплатного примера сервиса apex.oracle.com. Сожалею. Вы можете взаимодействовать с ним только через веб-интерфейс.

Во-вторых, если вы найдете удаленную базу данных Oracle для подключения, вам необходимо установить Oracle Instant Client для вашей ОС, и настроить расширение PHP OCI8.

0

По вопросам рекламы [email protected]