php точка входа в процедуру ocistmtgetnextresult не найдена в библиотеке dll oci.dll

azsx

Новичок
Скачал на win 7 64; php 7.1 64. Расскоментировал модуль extension=php_oci8_12c.dll
Теперь не работает даже php -v выводит диалоговое окно в котором написано:
------
php точка входа в процедуру ocistmtgetnextresult не найдена в библиотеке dll oci.dll
------
На этом компьютере стоит sql navigator который подключается по сети к бд oracle 11g, которая находиться в сети. На локальном компьютере именно oci.dll на диске c нет.
Скажите, пожалуйста, почему не работает модуль и как его запустить?
 

azsx

Новичок
скачал Oracle Instant Client, скопировал все файлы из него в system32. Абсолютно никак не помогло.
 

azsx

Новичок
Этот каталог я нашёл в windows. Скачал все файлы из Oracle Instant Client в каталог php и каталог php\ext.
Ошибка та же.
 

AnrDaemon

Продвинутый новичок
Вот как с такими людьми общаться?…

НЕ НАДО качать "все файлы".
Надо скачать один - Oracle Instant Client Basic Lite под твою версию (32 или 64).

НЕ НАДО "класть все файлы".
Надо взять ОДИН файл - OCI.dll, и положить его в каталог с php.exe.

И да, надо было раскомментировать не php_oci8_12c.dll а php_pdo_oci.dll …
 
  • Like
Реакции: azsx

AnrDaemon

Продвинутый новичок
Код:
--- "C:\\usr\\sbin\\php-7.1\\php-cli.out"    2017-05-13 19:38:46.504111800 +0300
+++ -    2017-05-25 17:18:34.975959900 +0300
@@ -9,8 +9,8 @@
 Server API => Command Line Interface
 Virtual Directory Support => enabled
 Configuration File (php.ini) Path => C:\Windows
-Loaded Configuration File => C:\usr\sbin\php-7.1.5\php-cli.ini
-Scan this dir for additional .ini files => C:\usr\sbin\php-7.1-extra\conf.d;C:\usr\sbin\php-7.1.5\conf.d
+Loaded Configuration File => C:\usr\sbin\php-7.1\php-cli.ini
+Scan this dir for additional .ini files => C:\usr\sbin\php-7.1-extra\conf.d;C:\usr\sbin\php-7.1\conf.d
 Additional .ini files parsed => C:\usr\sbin\php-7.1-extra\conf.d\00-core.ini,
 C:\usr\sbin\php-7.1-extra\conf.d\00-date.ini,
 C:\usr\sbin\php-7.1-extra\conf.d\00-extensions.ini,
@@ -34,6 +34,7 @@
 C:\usr\sbin\php-7.1-extra\conf.d\lua.ini,
 C:\usr\sbin\php-7.1-extra\conf.d\mailparse.ini,
 C:\usr\sbin\php-7.1-extra\conf.d\mysql.ini,
+C:\usr\sbin\php-7.1-extra\conf.d\oci.ini,
 C:\usr\sbin\php-7.1-extra\conf.d\openssl.ini,
 C:\usr\sbin\php-7.1-extra\conf.d\phar.ini,
 C:\usr\sbin\php-7.1-extra\conf.d\rrd.ini,
@@ -657,13 +658,17 @@
 PDO
 
 PDO support => enabled
-PDO drivers => mysql, sqlite
+PDO drivers => mysql, oci, sqlite
 
 pdo_mysql
 
 PDO Driver for MySQL => enabled
 Client API version => mysqlnd 5.0.12-dev - 20150407 - $Id: b396954eeb2d1d9ed7902b8bae237b287f21ad9e $
 
+PDO_OCI
+
+PDO Driver for OCI 8 and later => enabled
+
 pdo_sqlite
 
 PDO Driver for SQLite 3.x => enabled
 

azsx

Новичок
Спасибо большое. Диалоговое окно исчезло. Теперь у меня 2 вопроса
Код:
if ($c=OCILogon("test", "test", "192.168.0.10(это LAN_IP):1521/sales:SERVICE_NAME")) {
  echo "Successfully connected to Oracle.\n";
  OCILogoff($c);
} else {
  $err = OCIError();
  echo "Oracle Connect Error " . $err[text];
}
не работает. Какие параметры я напутал?
-------------
Код:
$tns = "
(DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.10)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = SERVICE_NAME)
    )
  )
       ";
$db_username = "test";
$db_password = "test";
try{
    $conn = new PDO("oci:dbname=".$tns,$db_username,$db_password);
}catch(PDOException $e){
    echo ($e->getMessage());
}
выводит ошибку
SQLSTATE[]: pdo_oci_handle_factory: <<Unknown>> (ext\pdo_oci\oci_driver.c:640)
но почему? Вроде все драйверы загрузил. Из phpinfo

Код:
PDO

PDO support => enabled
PDO drivers => oci

PDO_OCI

PDO Driver for OCI 8 and later => enabled
 

fixxxer

К.О.
Партнер клуба
Забудь про OCI*, используй PDO.

В документации написано как коннектиться, у тебя явно не так ведь.
 

azsx

Новичок
Вариант с pdo. В мануале я прочитал "Чтобы воспользоваться возможностями PDO, необходимо использовать соответствующий конкретной базе данныхPDO драйвер." pdo_oci http://php.net/manual/ru/ref.pdo-oci.php там пример:
Код:
$tns = "
(DESCRIPTION =
   (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.10)(PORT = 1521))
   )
   (CONNECT_DATA =
     (SERVICE_NAME = MY_SERVICE_NAME)
   )
  )
      ";
$db_username = "test";
$db_password = "test";
try{
   $conn = new PDO("oci:dbname=".$tns,$db_username,$db_password);
}catch(PDOException $e){
   echo ($e->getMessage());
}
Который мне выводит:
SQLSTATE[]: pdo_oci_handle_factory: <<Unknown>> (ext\pdo_oci\oci_driver.c:640)
из чего я делаю вывод, что опять какой то драйвер под pdo не загружен.
Я не прав?
----
В то же время обычный oci уже работает, но под него я не могу найти как параметры написать правильно (мануала нет).
 

AnrDaemon

Продвинутый новичок
Я же, ***, дал ссылку, куда читать.
Что за *** ты изобретаешь?…

oci:dbname=//192.168.0.10:1521/mydatabase
 

azsx

Новичок
Никак не получается, так как почему-то нет драйвера
Код:
<?php
$tns = new PDO('oci:dbname=//192.168.0.10:1521/SERVICE_NAME', 'test', 'test');
?>


c:\php>php 1.php
PHP Fatal error:  Uncaught PDOException: SQLSTATE[]: pdo_oci_handle_factory: <<
nknown>> (ext\pdo_oci\oci_driver.c:640) in C:\php\1.php:36
Stack trace:
#0 C:\php\1.php(36): PDO->__construct('oci:dbname=//17...', 'test', 'test')
#1 {main}
  thrown in C:\php\1.php on line 36

Fatal error: Uncaught PDOException: SQLSTATE[]: pdo_oci_handle_factory: <<Unkno
n>> (ext\pdo_oci\oci_driver.c:640) in C:\php\1.php:36
Stack trace:
#0 C:\php\1.php(36): PDO->__construct('oci:dbname=//17...', 'test', 'test')
#1 {main}
  thrown in C:\php\1.php on line 36

c:\php>
 
Сверху