If you've followed the instructions and you can't even connect to the DB server, welcome to the Oracle hell. Most of the information you'll find is deprecated, incomplete, not for your platform, unnecessary or just plain wrong.
Typically, you won't need at all those complicate setups you'll read about and they'll probably make things harder. I suggest you get Systernal's "Filemon" utility (for Windows, in Unix you may do with strace) and find out what exact config files and DLLs are being tried by php.exe (or httpd.exe if PHP runs as Apache module or...). Pretty often, the issue is that (e.g.) TNSNAMES.ORA does not have the correct line ending or Apache is looking for a DLL that does not even exist in your hard disc; learning that prevents you to waste time adding more and more useless environmental variables.
Goog luck.
Функции для работы с Oracle
Содержание
- oci_bind_array_by_name — Binds PHP array to Oracle PL/SQL array by name
- oci_bind_by_name — Привязывает переменную PHP к соответствующей метке в SQL-выражении.
- oci_cancel — Заканчивает процесс чтения из курсора
- oci_close — Закрывает соединение с сервером Oracle
- collection->append — Добавляет элемент в коллекцию
- collection->assign — Присваивает коллекции значение другой уже существующей коллекции
- OCI-Collection->assignElem — Assigns a value to the element of the collection
- OCI-Collection->free — Frees the resources associated with the collection object
- OCI-Collection->getElem — Returns value of the element
- collection->max — Возвращает максимальное количество элементов в коллекции.
- collection->size — Возвращает количество элементов в коллекции
- collection->trim — Отрезает элементы с конца коллекции
- oci_commit — Завершает и подтверждает транзакцию
- oci_connect — Устанавливает соединение с сервером Oracle
- oci_define_by_name — Определяет переменную PHP, в которую будет возвращено соответствующее поле из результата
- oci_error — Возвращает последнюю ошибку
- oci_execute — Выполняет выражение SQL
- oci_fetch_all — Выбирает все строки из результата запроса в массив
- oci_fetch_array — Возвращает следующую строку из результата запроса в виде ассоциативного массива, числового массива или оба сразу
- oci_fetch_assoc — Возвращает следующую строку из результата запроса в виде ассоциативного массива
- oci_fetch_object — Возвращает следующую строку из результата запроса в виде объекта
- oci_fetch_row — Возвращает следующую строку из результата запроса в виде массива с числовыми индексами
- oci_fetch — Выбирает следующую строку из результата в буфер
- oci_field_is_null — Проверяет, равняется ли поле NULL
- oci_field_name — Возвращает имя поля из результата запроса
- oci_field_precision — Возвращает точность поля
- oci_field_scale — Возвращает масштаб поля
- oci_field_size — Возвращает размер поля
- oci_field_type_raw — Возвращает тип исходный тип поля
- oci_field_type — Возвращает тип поля
- oci_free_statement — Освобождает ресурсы, занимаемые курсором или SQL-выражением
- oci_internal_debug — Включает и выключает внутреннюю отладку
- lob->append — Добавляет данные из объекта LOB в конец другого объекта
- lob->close — Закрывает дескриптор объекта LOB
- oci_lob_copy — Копирует содержание или часть содержания одного объекта LOB в другой
- lob->eof — Проверяет, находится ли указатель LOB на конце файла
- lob->erase — Очищает указанную часть объекта LOB
- lob->export — Сохраняет содержимое объекта LOB в файл
- lob->flush — Очищает и записывает буфер объекта LOB
- OCI-Lob->free — Frees resources associated with the LOB descriptor
- OCI-Lob->getBuffering — Returns current state of buffering for the large object
- lob->import — Записывает содержимое файла в объект LOB
- oci_lob_is_equal — Сравнивает два объекта LOB
- lob->load — Возвращает содержимое объекта LOB
- lob->read — Возвращает часть объекта LOB
- lob->rewind — Переводит указатель объекта в начало
- lob->save — Сохраняет данные в LOB
- OCI-Lob->saveFile — Псевдоним oci_lob_import
- lob->seek — Устанавливает позицию внутреннего указателя
- OCI-Lob->setBuffering — Changes current state of buffering for the large object
- lob->size — Возвращает размер объекта LOB
- lob->tell — Возвращает текущую позицию внутреннего указателя объекта
- lob->truncate — Обрезает LOB до указанной длины
- lob->write — Записывает данные в объект LOB
- OCI-Lob->writeTemporary — Writes temporary large object
- OCI-Lob->writeToFile — Псевдоним oci_lob_export
- oci_new_collection — Создает новый объект коллекции
- oci_new_connect — Устанавливает новое соединение с сервером Oracle
- oci_new_cursor — Возвращает идентификатор созданного курсора
- oci_new_descriptor — Инициализирует новый дескриптор объекта LOB или FILE
- oci_num_fields — Возвращает количество полей в результате запроса
- oci_num_rows — Возвращает количество строк, измененных в процессе выполнения запроса
- oci_parse — Подготавливает запрос к выполнению
- oci_password_change — Изменяет пароль пользователя Oracle
- oci_pconnect — Устанавливает постоянное соединение с сервером Oracle
- oci_result — Возвращает значение поля из результата запроса
- oci_rollback — Откатывает транзакции, ожидающие обработки
- oci_server_version — Возвращает строку с информацией о версии сервера Oracle
- oci_set_prefetch — Устанавливает количество строк, которые будут автоматически выбраны в буфер
- oci_statement_type — Возвращает тип выражения
- ocibindbyname — Псевдоним oci_bind_by_name
- ocicancel — Псевдоним oci_cancel
- ocicloselob — Псевдоним
- ocicollappend — Псевдоним
- ocicollassign — Псевдоним
- ocicollassignelem — Псевдоним
- ocicollgetelem — Псевдоним
- ocicollmax — Псевдоним
- ocicollsize — Псевдоним
- ocicolltrim — Псевдоним
- ocicolumnisnull — Псевдоним oci_field_is_null
- ocicolumnname — Псевдоним oci_field_name
- ocicolumnprecision — Псевдоним oci_field_precision
- ocicolumnscale — Псевдоним oci_field_scale
- ocicolumnsize — Псевдоним oci_field_size
- ocicolumntype — Псевдоним oci_field_type
- ocicolumntyperaw — Псевдоним oci_field_type_raw
- ocicommit — Псевдоним oci_commit
- ocidefinebyname — Псевдоним oci_define_by_name
- ocierror — Псевдоним oci_error
- ociexecute — Псевдоним oci_execute
- ocifetch — Псевдоним oci_fetch
- ocifetchinto — Выбирает следующую строку из результата запроса в массив
- ocifetchstatement — Выбирает все строки из результата запроса в массив
- ocifreecollection — Псевдоним
- ocifreecursor — Псевдоним oci_free_statement
- ocifreedesc — Псевдоним
- ocifreestatement — Псевдоним oci_free_statement
- ociinternaldebug — Псевдоним oci_internal_debug
- ociloadlob — Псевдоним
- ocilogoff — Псевдоним oci_close
- ocilogon — Псевдоним oci_connect
- ocinewcollection — Псевдоним oci_new_collection
- ocinewcursor — Псевдоним oci_new_cursor
- ocinewdescriptor — Псевдоним oci_new_descriptor
- ocinlogon — Псевдоним oci_new_connect
- ocinumcols — Псевдоним oci_num_fields
- ociparse — Псевдоним oci_parse
- ociplogon — Псевдоним oci_pconnect
- ociresult — Псевдоним oci_result
- ocirollback — Псевдоним oci_rollback
- ocirowcount — Псевдоним oci_num_rows
- ocisavelob — Псевдоним
- ocisavelobfile — Псевдоним
- ociserverversion — Псевдоним oci_server_version
- ocisetprefetch — Псевдоним oci_set_prefetch
- ocistatementtype — Псевдоним oci_statement_type
- ociwritelobtofile — Псевдоним
- ociwritetemporarylob — Псевдоним
OCI8
alvaro at demogracia dot com
10-Jun-2008 11:24
10-Jun-2008 11:24
christopher dot jones at oracle dot com
17-Jun-2007 04:25
17-Jun-2007 04:25
There are several good books on PHP and Oracle available - search your favorite bookstore. There is also a free book from Oracle "The Underground PHP and Oracle Manual" that covers the OCI8 extension: http://otn.oracle.com/tech/php/pdf/underground-php-oracle-manual.pdf
(free registration for OTN required, IIRC). Disclaimer: I'm one of its authors.
James VL
28-Feb-2007 06:49
28-Feb-2007 06:49
re: Andrei Kubar
I was using Oracle Instant Client on Windows XP, and was getting the
PHP Startup: Unable to load dynamic library 'C:\php\ext\php_oci8.dll' - The specified module could not be found.
error at startup, even though I had done all (most?) of the PHP and Oracle setup routines.
For me it wasn't the lack of mfc*.dll files, but a simple PATH issue: in addition to defining the environment variable TNS_ADMIN, I had to include my instant client directory in my PATH.
darkstar_ae at hotmail dot com
26-Apr-2005 05:39
26-Apr-2005 05:39
When fetching associative arrays, use uppercase string indices. It appears the PHP OCI Library is less lenient with the field names returned by Oracle.
e.g.
echo $row['field1']; // This won't return anything.
as opposed to:
echo $row['FIELD1'];
edahnke at consultant dot com
08-Jan-2002 08:01
08-Jan-2002 08:01
Here's a little snipet that shows how to insert multiple clob fields. Worked for me.
$dbh = OCILogon($dst_user_name, $dst_password, $dst_db_name);
for($i = 0; $i < $src_rec_cnt; $i++) {
$query = "insert into bid (id,time,resume,experience,comments) values ('$id[$i]','$time[$i]',empty_clob(),empty_clob(),empty_clob()) returning resume,experience,comments into :resume,:experience,:comments";
$stmt = OCIParse($dbh, $query);
$clob1 = OCINewDescriptor($dbh, OCI_D_LOB);
$clob2 = OCINewDescriptor($dbh, OCI_D_LOB);
$clob3 = OCINewDescriptor($dbh, OCI_D_LOB);
OCIBindByName ($stmt, ":resume", &$clob1, -1, OCI_B_CLOB);
OCIBindByName ($stmt, ":experience", &$clob2, -1, OCI_B_CLOB);
OCIBindByName ($stmt, ":comments", &$clob3, -1, OCI_B_CLOB);
OCIExecute($stmt, OCI_DEFAULT);
@$clob1->save ($resume[$i]);
@$clob2->save ($experience[$i]);
@$clob3->save ($comments[$i]);
OCICommit($dbh);
doug at redhive dot com
19-Jul-2001 09:38
19-Jul-2001 09:38
if you feel like you have too many oracle statements clouding up your php, i came up with a function to open a connection (if necessary), parse your sql statement, and return the executed query. after you call the function, you can do whatever needs to be done. makes like so much simpler: (do whatever you want with the errors)
function execute_query($query, &$connected) {
global $ORACLE_USER, $ORACLE_PASS, $ORACLE_SID;
if(!$connected) {
$connected = @OCIPLogon($ORACLE_USER, $ORACLE_PASS, $ORACLE_SID);
if($error = OCIError()) {
die("<font color=red>ERROR!! Couldn't connect to server!</font>");
}
}
$stmt = @OCIParse($connected, $query);
if($error = OCIError($cn)) {
die("<font color=red>ERROR!! Statement syntax error!</font>");
}
@OCIExecute($stmt);
if($error = OCIError($stmt)) {
die("<font color=red>ERROR!! Could not execute statement!</font>");
}
return $stmt;
}
jasendorf at lcounty dot com
23-May-2001 10:48
23-May-2001 10:48
VERY IMPORTANT! OCIPLogon only keeps a persistent connection if you are running PHP as a module. This is particularly important to Windows users who are used to running PHP as a CGI.
junk at netburp dot com
19-Oct-2000 09:39
19-Oct-2000 09:39
Here's a clue about rowid.
Don't forget about the oracle functions:
"rowidtochar" and "chartorowid"
"select rowidtochar(rowid) as FOO from table ...."
When you want to pass the rowid in a form or link, that's
the only way to go.
