Подскажите, пожалуйста, что-то никак не могу понять одну простую вещь, вообщем есть запрос к Ораклу примерно так SELECT * FROM TABLE1 WHERE ... and TABLE1.FIELD1 IS NOT NULL - одно из ключевых условий ... выполняю в SQL Navigator - работает как часы - вадает то, что надо, затем пытаюсь перетащить в WEB $conn = ora_logon($USER."@".$ALIAS, $PASSWORD'); $curs = ora_open($conn); ora_commitoff($conn); if (!ora_parse($curs, $query)) die("Ошибка выполнения запроса. Повторите еще раз.") ; ora_exec($curs); while ( ora_fetch($curs) ) { ... } В итоге курсор получается пустой. Просто даже неясно, где искать ошибку.
Простой пример из мануала <?php /* oci_fetch_all example mbritton at verinet dot com (990624) */ $conn = oci_connect("scott", "tiger"); $stmt = oci_parse($conn, "select * from emp"); oci_execute($stmt); $nrows = oci_fetch_all($stmt, $results); if ($nrows > 0) { echo "<table border=\"1\">\n"; echo "<tr>\n"; while (list($key, $val) = each($results)) { echo "<th>$key</th>\n"; } echo "</tr>\n"; for ($i = 0; $i < $nrows; $i++) { reset($results); echo "<tr>\n"; while ($column = each($results)) { $data = $column['value']; echo "<td>$data[$i]</td>\n"; } echo "</tr>\n"; } echo "</table>\n"; } else { echo "No data found<br />\n"; } echo "$nrows Records Selected<br />\n"; oci_free_statement($stmt); oci_close($conn); ?>
Да, чуть не забыл, если на сервере Oracle работает несколько инстанций, то перед использованием oci_connect, следует указать к какой из них ты подключаешься, примерно так $db="(DESCRIPTION= (ADDRESS_LIST= (ADDRESS=(PROTOCOL=TCP) (HOST=IP Адрес сервера Oracle)(PORT=1521) ) ) (CONNECT_DATA=(SERVICE_NAME=Имя Инстанции)(SERVER = DEDICATED)) )"; И у же oci_connect вызывать с третип параметром $conn = oci_connect("scott", "tiger", $db);
Добрый день ! У меня иногда при выполнении цикла по курсору выскакивает ошибка "Инвалид курсор". А если попробовать обновить страницу, то ошибка исчезает и всё проходит нормально... Иногда так часто происходит, иногда редко... В какую сторону копать, что подкрутить, поднастроить ?
Mayof_Filatoff. А. Это проблема виндовой версии OCI библиотечки в PHP5. Тебе надо вот это скачать, и или библиотечки выдрать из него и заюзать, либо оставить весь комплекс(как мы и сделали).
ОС: WinXP SP2; Apache 1.3.37 PHP 5.2.1 Установлен Клиент Oracle 9.2 и InstantClient_10_2 (ввиде oci.dll, ociw32.dll, ocijdbc10.dll, oraociei10.dll) Переменные окружения path=C:\oracle\ora92\bin;C:\Program Files\Oracle\jre\1.3.1\bin;C:\Program Files\Oracle\jre\1.1.8\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem; C:\Program Files\Private Shell;c:\instantclient_10_2; Oracle_home=c:\instantclient_10_2 nls_lang=AMERICAN_AMERICA.CL8MSWIN1251 oracle_sid=dbname LD_LIBRARY_PATH=C:\instantclient_10_2 phpinfo пишет oci8 OCI8 Support enabled Version 1.2.3 Revision $Revision: 1.269.2.16.2.32 $ Active Persistent Connections 0 Active Connections 0 Temporary Lob support enabled Collections support enabled Directive Local Value Master Value oci8.default_prefetch 10 10 oci8.max_persistent -1 -1 oci8.old_oci_close_semantics 0 0 oci8.persistent_timeout -1 -1 oci8.ping_interval 60 60 oci8.privileged_connect Off Off oci8.statement_cache_size 20 20 при выполнении скритпа <? $conn=ocilogon('user','pass','dbname'); ?> выдает Warning: ocilogon() [function.ocilogon]: OCIEnvNlsCreate() failed. There is something wrong with your system - please check that PATH includes the directory with Oracle Instant Client libraries in D:\WWW\1\1.php on line 2 Подскажите чего ему не хватает.
Вот хоть какая-то подсказка. Теперь хотелось бы по конкретнее. в переменной PATH указаны ВСЕ места где присутствует Oracle
Скопировал настройки с одного сервера на другой, пути поисправлял, но всё равно выдаёт ошибку: Warning: ocilogon() [function.ocilogon]: _oci_open_server: ORA-12560: TNSrotocol adapter error in ... Средствами клиента Оракла проверял - к базе коннектится без проблемм, а тут такое...
Такое же сообщение об ошибке выдавалось, оракл XE клиент. Когда в файле php.ini закомментил строку extension php_oracle.dll то работает. т.е. две библиотечки (oracle и oci8) одновременно не работают. Точнее, oci8 не работает, если подключена oracle.