(PHP 5, PHP 7, PHP 8, PECL OCI8 >= 1.1.0)
oci_execute — Выполняет подготовленное выражение
Описание
oci_execute(resource $statement
, int $mode
= OCI_COMMIT_ON_SUCCESS
): bool
Сразу после выполнения выражения подобного INSERT
,
по умолчанию все данные сразу будут сохранены в базе данных. Для
выражений подобных SELECT
, выполняется только
логика запроса. Результат же запроса можно получить позже в PHP
с помощью функций подобных oci_fetch_array().
Каждое подготовленное выражение может быть выполнено несколько раз
для экономии на издержках от повторной подготовки запроса.
Это чаще всего применяется для выражений INSERT
,
когда к ним привязаны данные с помощью oci_bind_by_name().
Список параметров
-
statement
-
Правильное подготовленное выражение OCI.
-
mode
-
Необязательный второй параметр с одним из следующих значений:
Режим выполнения
Константа Описание OCI_COMMIT_ON_SUCCESS
Автоматически сохранять все несохраненные изменения,
произведённые за текущую сессию в случае успешного выполнения выражения.
Этот режим установлен по умолчанию.OCI_DESCRIBE_ONLY
Делает доступными метаданные запроса для функций подобных
oci_field_name(), но не создаёт результат выполнения выражения.
Любое последующее получение данных, например с помощью
oci_fetch_array() не будет произведено.OCI_NO_AUTO_COMMIT
Не сохранять автоматически изменения. Для PHP
5.3.2 (PECL OCI8 1.4)
используйтеOCI_DEFAULT
, которая является эквивалентом
дляOCI_NO_AUTO_COMMIT
.Использование режима
OCI_NO_AUTO_COMMIT
открывает или продолжает транзакцию. Эта транзакция автоматически
откатывается при закрытии соединения или завершении скрипта. Используйте
oci_commit() для завершения транзакции
и oci_rollback() для её отмены.При вставке и обновлении данных рекомендуется использование транзакций
для реляционной целостности данных и для улучшения производительности.Если для какого-нибудь выражения используется режим
OCI_NO_AUTO_COMMIT
,
и впоследствии не используются oci_commit() или
oci_rollback(), то OCI8 будет выполнять откат
при завершении скрипта даже если данные не были изменены.
Для избежания ненужных откатов большинство скриптов не используют
режимOCI_NO_AUTO_COMMIT
для запросов или
PL/SQL. Будьте внимательны, чтобы обеспечить
надлежащую согласованность транзакций при использовании oci_execute()
с различными режимами в одном скрипте.
Возвращаемые значения
Возвращает true
в случае успешного выполнения или false
в случае возникновения ошибки.
Примеры
Пример #1 oci_execute() при выполнении запросов
<?php
$conn
= oci_connect('hr', 'welcome', 'localhost/XE');$stid = oci_parse($conn, 'SELECT * FROM employees');
oci_execute($stid);
echo
"<table border='1'>n";
while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
echo "<tr>n";
foreach ($row as $item) {
echo " <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : "") . "</td>n";
}
echo "</tr>n";
}
echo "</table>n";?>
Пример #2 oci_execute() без указания определённого режима
<?php// Перед выполнением создайте таблицу:
// CREATE TABLE MYTABLE (col1 NUMBER);$conn = oci_connect('hr', 'welcome', 'localhost/XE');$stid = oci_parse($conn, 'INSERT INTO mytab (col1) VALUES (123)');oci_execute($stid); // Строка сохранена и становится видимой для других пользователей?>
Пример #3 oci_execute() с OCI_NO_AUTO_COMMIT
<?php// Перед выполнением создайте таблицу:
// CREATE TABLE MYTABLE (col1 NUMBER);$conn = oci_connect('hr', 'welcome', 'localhost/XE');$stid = oci_parse($conn, 'INSERT INTO mytab (col1) VALUES (:bv)');
oci_bind_by_name($stid, ':bv', $i, 10);
for ($i = 1; $i <= 5; ++$i) {
oci_execute($stid, OCI_NO_AUTO_COMMIT); // use OCI_DEFAULT for PHP <= 5.3.1
}
oci_commit($conn); // сохранение все новых значений: 1, 2, 3, 4, 5?>
Пример #4 oci_execute() с различными режимами
<?php// Перед выполнением создайте таблицу:
// CREATE TABLE MYTABLE (col1 NUMBER);$conn = oci_connect('hr', 'welcome', 'localhost/XE');$stid = oci_parse($conn, 'INSERT INTO mytab (col1) VALUES (123)');
oci_execute($stid, OCI_NO_AUTO_COMMIT); // data not committed$stid = oci_parse($conn, 'INSERT INTO mytab (col1) VALUES (456)');
oci_execute($stid); // commits both 123 and 456 values?>
Пример #5 oci_execute() с
OCI_DESCRIBE_ONLY
<?php
$conn
= oci_connect('hr', 'welcome', 'localhost/XE');$stid = oci_parse($conn, 'SELECT * FROM locations');
oci_execute($s, OCI_DESCRIBE_ONLY);
for ($i = 1; $i <= oci_num_fields($stid); ++$i) {
echo oci_field_name($stid, $i) . "<br>n";
}?>
Примечания
Замечание:
Транзакции автоматически откатываются при закрытии соединения или
завершении выполнения скрипта. Принудительно вызывайте
oci_commit() для завершения транзакции.Любой вызов oci_execute(), который принудительно
используетOCI_COMMIT_ON_SUCCESS
или по умолчанию
будет завершать любую предыдущую незакрытую транзакцию.Любое выражение Oracle DDL подобное
CREATE
илиDROP
будет автоматически завершать
любую. незакрытую транзакцию.
Замечание:
Так как функция oci_execute() обычно
отправляет выражения в базу данных, то oci_execute()
может найти некоторые незначительные синтаксические ошибки, когда
локальная oci_parse() их не находит.
Смотрите также
- oci_parse() — Подготавливает запрос к выполнению
tower98 at gmail dot com ¶
12 years ago
Notice (PHP 5.2.12-pl0-gentoo):
You can parse empty query, you can execute empty query (returns true), but you cannot fetch data from empty query. So, if you provide query as variable, make sure it isn't empty.
<?php
$q = oci_parse($c, "");
if($q != false){
// parsing empty query != false
if(oci_execute($q){
// executing empty query != false
if(oci_fetch_all($q, $data, 0, -1, OCI_FETCHSTATEMENT_BY_ROW) == false){
// but fetching executed empty query results in error (ORA-24338: statement handle not executed)
$e = oci_error($q);
echo $e['message'];
}
}
else{
$e = oci_error($q);
echo $e['message'];
}
}
else{
$e = oci_error($link);
echo $e['message'];
}
?>
michaelhughes at strath dot ac dot uk ¶
7 years ago
You can pass a "false" value to oci_execute() and this returns a null value, instead of the documented false value.
<?php
$conn = oci_connect('username', 'password, '//hostname:1521/DB');$result = oci_execute(false);
var_dump($result);
?>
Results in "null", so performing an Identical test:
<?php
if ($results === false) {
//throw exception
}
?>
won't trap a problem, where as the Equal test (==) would:
<?php
if ($results == false) {
//throw exception
}
?>
So testing the result of a statement like oci_parse() is important!
filipesampaio at hotmail dot com ¶
11 years ago
Just to write it down. I was trying to do a simple SELECT on a Caché (http://www.intersystems.com/cache/) table through an Oracle dblink, but always received the error "ORA-01002: fetch out of sequence". The solution was using OCI_NO_AUTO_COMMIT on the oci_execute function.
Содержание
- oci_error
- Описание
- Список параметров
- Возвращаемые значения
- Список изменений
- Примеры
- oci_execute — Выполняет подготовленное выражение
- Описание
- Список параметров
- Возвращаемые значения
- Примеры
- Примечания
- Смотрите также
- oci_error — Возвращает последнюю ошибку
- Описание
- Список параметров
- Возвращаемые значения
- Примеры
- oci_execute
- Description
- Parameters
- Return Values
- Examples
- Notes
- See Also
- User Contributed Notes 3 notes
oci_error
(PHP 5, PHP 7, PHP 8, PECL OCI8 >= 1.1.0)
oci_error — Возвращает последнюю ошибку
Описание
Возвращает последнюю найденную ошибку.
Функция должна вызваться сразу же после появления ошибки. Ошибки очищаются при произведении правильного запроса.
Список параметров
Для большинства ошибок параметром connection_or_statement является соответствующий идентификатор соединения или выражения. Для ошибок во время выполнения функций oci_connect() , oci_new_connect() или oci_pconnect() следует передавать null .
Возвращаемые значения
Если ошибок не найдено, то oci_error() возвращает false . В противном случае, oci_error() возвращает информацию об ошибке в виде ассоциативного массива.
Описание массива вывода oci_error()
Ключ массива | Тип | Описание |
---|---|---|
code | int | Номер ошибки Oracle. |
message | string | Текст ошибки Oracle. |
offset | int | Позиция ошибки в запросе SQL. Если нет запроса, то равна 0 |
sqltext | string | Текст запроса SQL. Если нет запроса, то строка пуста. |
Список изменений
Версия | Описание |
---|---|
8.0.0, PECL OCI8 3.0.0 | connection_or_statement теперь допускает значение null. |
Примеры
Пример #1 Вывод сообщения об ошибке Oracle после ошибки соединения
Пример #2 Вывод сообщения об ошибке Oracle после ошибки разбора
Пример #3 Вывод сообщения об ошибке Oracle, ошибочного запроса и позиции ошибки запуска запроса
Источник
oci_execute — Выполняет подготовленное выражение
(PHP 5, PHP 7, PECL OCI8 >= 1.1.0)
oci_execute — Выполняет подготовленное выражение
Описание
Выполняет подготовленное выражение statement , созданное с помощью функции oci_parse() .
Сразу после выполнения выражения подобного INSERT, по умолчанию все данные сразу будут сохранены в базе данных. Для выражений подобных SELECT, выполняется только логика запроса. Результат же запроса можно получить позже в PHP с помощью функций подобных oci_fetch_array() .
Каждое подготовленное выражение может быть выполнено несколько раз для экономии на издержках от повторной подготовки запроса. Это чаще всего применяется для выражений INSERT, когда к ним привязаны данные с помощью oci_bind_by_name() .
Список параметров
Правильное подготовленное выражение OCI.
Необязательный второй параметр с одним из следующих значений:
Режим выполнения
Константа | Описание |
---|---|
OCI_COMMIT_ON_SUCCESS | Автоматически сохранять все несохраненные изменения, произведенные за текущую сессию при успешном выполнении выражения. Этот режим установлен по умолчанию. |
OCI_DESCRIBE_ONLY | Делает доступными метаданные запроса для функций подобных oci_field_name() , но не создает результат выполнения выражения. Любое последующее получение данных, например с помощью oci_fetch_array() не будет произведено. |
OCI_NO_AUTO_COMMIT | Не сохранять автоматически изменения. Для PHP 5.3.2 (PECL OCI8 1.4) используйте OCI_DEFAULT , которая является эквивалентом для OCI_NO_AUTO_COMMIT . |
Использование режима OCI_NO_AUTO_COMMIT открывает или продолжает транзакцию. Эта транзакция автоматически откатывается при закрытии соединения или завершении скрипта. Используйте oci_commit() для завершения транзакции и oci_rollback() для ее отмены.
При вставке и обновлении данных рекомендуется использование транзакций для реляционной целостности данных и для улучшения производительности.
Если для какого-нибудь выражения используется режим OCI_NO_AUTO_COMMIT , и впоследствии не используются oci_commit() или oci_rollback() , то OCI8 будет выполнять откат при завершении скрипта даже если данные не были изменены. Для избежания ненужных откатов большинство скриптов не используют режим OCI_NO_AUTO_COMMIT для запросов или PL/SQL. Будьте внимательны, чтобы обеспечить надлежащую согласованность транзакций при использовании oci_execute() с различными режимами в одном скрипте.
Возвращаемые значения
Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.
Примеры
Пример #1 oci_execute() при выполнении запросов
= oci_connect ( ‘hr’ , ‘welcome’ , ‘localhost/XE’ );
$stid = oci_parse ( $conn , ‘SELECT * FROM employees’ );
oci_execute ( $stid );
echo »
n» ;
n» ;
>
echo «
n» ;
>
echo «
» . ( $item !== null ? htmlentities ( $item , ENT_QUOTES ) : «» ) . «
while ( $row = oci_fetch_array ( $stid , OCI_ASSOC + OCI_RETURN_NULLS )) <echo » n» ; foreach ( $row as $item ) <echo »
n» ;
Пример #2 oci_execute() без указания определенного режима
// Перед выполнением создайте таблицу:
// CREATE TABLE MYTABLE (col1 NUMBER);
$conn = oci_connect ( ‘hr’ , ‘welcome’ , ‘localhost/XE’ );
$stid = oci_parse ( $conn , ‘INSERT INTO mytab (col1) VALUES (123)’ );
oci_execute ( $stid ); // Строка сохранена и становится видимой для других пользователей
Пример #3 oci_execute() с OCI_NO_AUTO_COMMIT
// Перед выполнением создайте таблицу:
// CREATE TABLE MYTABLE (col1 NUMBER);
$conn = oci_connect ( ‘hr’ , ‘welcome’ , ‘localhost/XE’ );
$stid = oci_parse ( $conn , ‘INSERT INTO mytab (col1) VALUES (:bv)’ );
oci_bind_by_name ( $stid , ‘:bv’ , $i , 10 );
for ( $i = 1 ; $i 5 ; ++ $i ) <
oci_execute ( $stid , OCI_NO_AUTO_COMMIT ); // use OCI_DEFAULT for PHP >
oci_commit ( $conn ); // сохранение все новых значений: 1, 2, 3, 4, 5
Пример #4 oci_execute() с различными режимами
// Перед выполнением создайте таблицу:
// CREATE TABLE MYTABLE (col1 NUMBER);
$conn = oci_connect ( ‘hr’ , ‘welcome’ , ‘localhost/XE’ );
$stid = oci_parse ( $conn , ‘INSERT INTO mytab (col1) VALUES (123)’ );
oci_execute ( $stid , OCI_NO_AUTO_COMMIT ); // data not committed
$stid = oci_parse ( $conn , ‘INSERT INTO mytab (col1) VALUES (456)’ );
oci_execute ( $stid ); // commits both 123 and 456 values
Пример #5 oci_execute() с OCI_DESCRIBE_ONLY
= oci_connect ( ‘hr’ , ‘welcome’ , ‘localhost/XE’ );
$stid = oci_parse ( $conn , ‘SELECT * FROM locations’ );
oci_execute ( $s , OCI_DESCRIBE_ONLY );
for ( $i = 1 ; $i oci_num_fields ( $stid ); ++ $i ) <
echo oci_field_name ( $stid , $i ) . «
n» ;
>
Примечания
Транзакции автоматически откатываются при закрытии соединения или завершении выполнения скрипта. Принудительно вызывайте oci_commit() для завершения транзакции.
Любой вызов oci_execute() , который принудительно использует OCI_COMMIT_ON_SUCCESS или по умолчанию будет завершать любую предыдущую незакрытую транзакцию.
Любое выражение Oracle DDL подобное CREATE или DROP будет автоматически завершать любу. незакрытую транзакцию.
Так как функция oci_execute() обычно отправляет выражения в базу данных, то oci_execute() может найти некоторые незначительные синтаксические ошибки, когда локальная oci_parse() их не находит.
Смотрите также
- oci_parse() — Подготавливает запрос к выполнению
Источник
oci_error — Возвращает последнюю ошибку
(PHP 5, PHP 7, PECL OCI8 >= 1.1.0)
oci_error — Возвращает последнюю ошибку
Описание
Возвращает последнюю найденную ошибку.
Функция должны вызваться сразу же после появления ошибки. Ошибки очищаются при произведении правильного запроса.
Список параметров
Для большинства ошибок параметром resource является соответствующий идентификатор соединения или выражения. Для ошибок во время выполнения функций oci_connect() , oci_new_connect() и oci_pconnect() параметр resource указывать не следует.
Возвращаемые значения
Если ошибок не найдено, то oci_error() возвращает FALSE . В другом случае, oci_error() возвращает информацию об ошибке в виде ассоциативного массива.
Описание массива вывода oci_error()
Ключ массива | Тип | Описание |
---|---|---|
code | integer | Номер ошибки Oracle. |
message | string | Текст ошибки Oracle. |
offset | integer | Позиция ошибки в запросе SQL. Если нет запроса, то равна |
sqltext | string | Текст запроса SQL. Если нет запроса, то строка пуста. |
Примеры
Пример #1 Вывод сообщения об ошибке Oracle после ошибки соединения
Пример #2 Вывод сообщения об ошибке Oracle после ошибки разбора
Пример #3 Вывод сообщения об ошибке Oracle, ошибочного запроса и позиции ошибки запуска запроса
Источник
oci_execute
(PHP 5, PHP 7, PHP 8, PECL OCI8 >= 1.1.0)
oci_execute — Executes a statement
Description
Executes a statement previously returned from oci_parse() .
After execution, statements like INSERT will have data committed to the database by default. For statements like SELECT , execution performs the logic of the query. Query results can subsequently be fetched in PHP with functions like oci_fetch_array() .
Each parsed statement may be executed multiple times, saving the cost of re-parsing. This is commonly used for INSERT statements when data is bound with oci_bind_by_name() .
Parameters
A valid OCI statement identifier.
An optional second parameter can be one of the following constants:
Execution Modes
Constant | Description |
---|---|
OCI_COMMIT_ON_SUCCESS | Automatically commit all outstanding changes for this connection when the statement has succeeded. This is the default. |
OCI_DESCRIBE_ONLY | Make query meta data available to functions like oci_field_name() but do not create a result set. Any subsequent fetch call such as oci_fetch_array() will fail. |
OCI_NO_AUTO_COMMIT | Do not automatically commit changes. Prior to PHP 5.3.2 (PECL OCI8 1.4) use OCI_DEFAULT which is equivalent to OCI_NO_AUTO_COMMIT . |
Using OCI_NO_AUTO_COMMIT mode starts or continues a transaction. Transactions are automatically rolled back when the connection is closed, or when the script ends. Explicitly call oci_commit() to commit a transaction, or oci_rollback() to abort it.
When inserting or updating data, using transactions is recommended for relational data consistency and for performance reasons.
If OCI_NO_AUTO_COMMIT mode is used for any statement including queries, and oci_commit() or oci_rollback() is not subsequently called, then OCI8 will perform a rollback at the end of the script even if no data was changed. To avoid an unnecessary rollback, many scripts do not use OCI_NO_AUTO_COMMIT mode for queries or PL/SQL. Be careful to ensure the appropriate transactional consistency for the application when using oci_execute() with different modes in the same script.
Return Values
Returns true on success or false on failure.
Examples
Example #1 oci_execute() for queries
= oci_connect ( ‘hr’ , ‘welcome’ , ‘localhost/XE’ );
$stid = oci_parse ( $conn , ‘SELECT * FROM employees’ );
oci_execute ( $stid );
echo »
n» ;
n» ;
>
echo «
n» ;
>
echo «
» . ( $item !== null ? htmlentities ( $item , ENT_QUOTES ) : » » ) . «
while ( $row = oci_fetch_array ( $stid , OCI_ASSOC + OCI_RETURN_NULLS )) <echo » n» ; foreach ( $row as $item ) <echo »
n» ;
Example #2 oci_execute() without specifying a mode example
// Before running, create the table:
// CREATE TABLE MYTABLE (col1 NUMBER);
$conn = oci_connect ( ‘hr’ , ‘welcome’ , ‘localhost/XE’ );
$stid = oci_parse ( $conn , ‘INSERT INTO mytab (col1) VALUES (123)’ );
oci_execute ( $stid ); // The row is committed and immediately visible to other users
Example #3 oci_execute() with OCI_NO_AUTO_COMMIT example
// Before running, create the table:
// CREATE TABLE MYTABLE (col1 NUMBER);
$conn = oci_connect ( ‘hr’ , ‘welcome’ , ‘localhost/XE’ );
$stid = oci_parse ( $conn , ‘INSERT INTO mytab (col1) VALUES (:bv)’ );
oci_bind_by_name ( $stid , ‘:bv’ , $i , 10 );
for ( $i = 1 ; $i 5 ; ++ $i ) <
oci_execute ( $stid , OCI_NO_AUTO_COMMIT ); // use OCI_DEFAULT for PHP >
oci_commit ( $conn ); // commits all new values: 1, 2, 3, 4, 5
Example #4 oci_execute() with different commit modes example
// Before running, create the table:
// CREATE TABLE MYTABLE (col1 NUMBER);
$conn = oci_connect ( ‘hr’ , ‘welcome’ , ‘localhost/XE’ );
$stid = oci_parse ( $conn , ‘INSERT INTO mytab (col1) VALUES (123)’ );
oci_execute ( $stid , OCI_NO_AUTO_COMMIT ); // data not committed
$stid = oci_parse ( $conn , ‘INSERT INTO mytab (col1) VALUES (456)’ );
oci_execute ( $stid ); // commits both 123 and 456 values
Example #5 oci_execute() with OCI_DESCRIBE_ONLY example
= oci_connect ( ‘hr’ , ‘welcome’ , ‘localhost/XE’ );
$stid = oci_parse ( $conn , ‘SELECT * FROM locations’ );
oci_execute ( $s , OCI_DESCRIBE_ONLY );
for ( $i = 1 ; $i oci_num_fields ( $stid ); ++ $i ) <
echo oci_field_name ( $stid , $i ) . «
n» ;
>
Notes
Transactions are automatically rolled back when connections are closed, or when the script ends, whichever is soonest. Explicitly call oci_commit() to commit a transaction.
Any call to oci_execute() that uses OCI_COMMIT_ON_SUCCESS mode explicitly or by default will commit any previous uncommitted transaction.
Any Oracle DDL statement such as CREATE or DROP will automatically commit any uncommitted transaction.
Because the oci_execute() function generally sends the statement to the database, oci_execute() can identify some statement syntax errors that the lightweight, local oci_parse() function does not.
See Also
- oci_parse() — Prepares an Oracle statement for execution
User Contributed Notes 3 notes
Notice (PHP 5.2.12-pl0-gentoo):
You can parse empty query, you can execute empty query (returns true), but you cannot fetch data from empty query. So, if you provide query as variable, make sure it isn’t empty.
= oci_parse ( $c , «» );
if( $q != false ) <
// parsing empty query != false
if( oci_execute ( $q ) <
// executing empty query != false
if( oci_fetch_all ( $q , $data , 0 , — 1 , OCI_FETCHSTATEMENT_BY_ROW ) == false ) <
// but fetching executed empty query results in error (ORA-24338: statement handle not executed)
$e = oci_error ( $q );
echo $e [ ‘message’ ];
>
>
else <
$e = oci_error ( $q );
echo $e [ ‘message’ ];
>
>
else <
$e = oci_error ( $link );
echo $e [ ‘message’ ];
>
?>
You can pass a «false» value to oci_execute() and this returns a null value, instead of the documented false value.
= oci_connect ( ‘username’ , ‘password, ‘ //hostname:1521/DB’);
$result = oci_execute ( false );
var_dump ( $result );
?>
Results in «null», so performing an Identical test:
if ( $results === false ) <
//throw exception
>
?>
won’t trap a problem, where as the Equal test (==) would:
if ( $results == false ) <
//throw exception
>
?>
So testing the result of a statement like oci_parse() is important!
Источник
oci_execute
(PHP 5, PHP 7, PECL OCI8 >= 1.1.0)
oci_execute — Выполняет подготовленное выражение
Описание
bool oci_execute
( resource $statement
[, int $mode
= OCI_COMMIT_ON_SUCCESS
] )
Сразу после выполнения выражения подобного INSERT,
по умолчанию все данные сразу будут сохранены в базе данных. Для
выражений подобных SELECT, выполняется только
логика запроса. Результат же запроса можно получить позже в PHP
с помощью функций подобных oci_fetch_array().
Каждое подготовленное выражение может быть выполнено несколько раз
для экономии на издержках от повторной подготовки запроса.
Это чаще всего применяется для выражений INSERT,
когда к ним привязаны данные с помощью oci_bind_by_name().
Список параметров
-
statement
-
Правильное подготовленное выражение OCI.
-
mode
-
Необязательный второй параметр с одним из следующих значений:
Режим выполнения
Константа Описание OCI_COMMIT_ON_SUCCESS
Автоматически сохранять все несохраненные изменения,
произведенные за текущую сессию при успешном выполнении выражения.
Этот режим установлен по умолчанию.OCI_DESCRIBE_ONLY
Делает доступными метаданные запроса для функций подобных
oci_field_name(), но не создает результат выполнения выражения.
Любое последующее получение данных, например с помощью
oci_fetch_array() не будет произведено.OCI_NO_AUTO_COMMIT
Не сохранять автоматически изменения. Для PHP
5.3.2 (PECL OCI8 1.4)
используйтеOCI_DEFAULT
, которая является эквивалентом
дляOCI_NO_AUTO_COMMIT
.Использование режима
OCI_NO_AUTO_COMMIT
открывает или продолжает транзакцию. Эта транзакция автоматически
откатывается при закрытии соединения или завершении скрипта. Используйте
oci_commit() для завершения транзакции
и oci_rollback() для ее отмены.При вставке и обновлении данных рекомендуется использование транзакций
для реляционной целостности данных и для улучшения производительности.Если для какого-нибудь выражения используется режим
OCI_NO_AUTO_COMMIT
,
и впоследствии не используются oci_commit() или
oci_rollback(), то OCI8 будет выполнять откат
при завершении скрипта даже если данные не были изменены.
Для избежания ненужных откатов большинство скриптов не используют
режимOCI_NO_AUTO_COMMIT
для запросов или
PL/SQL. Будьте внимательны, чтобы обеспечить
надлежащую согласованность транзакций при использовании oci_execute()
с различными режимами в одном скрипте.
Возвращаемые значения
Возвращает TRUE
в случае успешного завершения или FALSE
в случае возникновения ошибки.
Примеры
Пример #1 oci_execute() при выполнении запросов
<?php
$conn
= oci_connect('hr', 'welcome', 'localhost/XE');$stid = oci_parse($conn, 'SELECT * FROM employees');
oci_execute($stid);
echo
"<table border='1'>n";
while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
echo "<tr>n";
foreach ($row as $item) {
echo " <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : "") . "</td>n";
}
echo "</tr>n";
}
echo "</table>n";?>
Пример #2 oci_execute() без указания определенного режима
<?php// Перед выполнением создайте таблицу:
// CREATE TABLE MYTABLE (col1 NUMBER);$conn = oci_connect('hr', 'welcome', 'localhost/XE');$stid = oci_parse($conn, 'INSERT INTO mytab (col1) VALUES (123)');oci_execute($stid); // Строка сохранена и становится видимой для других пользователей?>
Пример #3 oci_execute() с OCI_NO_AUTO_COMMIT
<?php// Перед выполнением создайте таблицу:
// CREATE TABLE MYTABLE (col1 NUMBER);$conn = oci_connect('hr', 'welcome', 'localhost/XE');$stid = oci_parse($conn, 'INSERT INTO mytab (col1) VALUES (:bv)');
oci_bind_by_name($stid, ':bv', $i, 10);
for ($i = 1; $i <= 5; ++$i) {
oci_execute($stid, OCI_NO_AUTO_COMMIT); // use OCI_DEFAULT for PHP <= 5.3.1
}
oci_commit($conn); // сохранение все новых значений: 1, 2, 3, 4, 5?>
Пример #4 oci_execute() с различными режимами
<?php// Перед выполнением создайте таблицу:
// CREATE TABLE MYTABLE (col1 NUMBER);$conn = oci_connect('hr', 'welcome', 'localhost/XE');$stid = oci_parse($conn, 'INSERT INTO mytab (col1) VALUES (123)');
oci_execute($stid, OCI_NO_AUTO_COMMIT); // data not committed$stid = oci_parse($conn, 'INSERT INTO mytab (col1) VALUES (456)');
oci_execute($stid); // commits both 123 and 456 values?>
Пример #5 oci_execute() с
OCI_DESCRIBE_ONLY
<?php
$conn
= oci_connect('hr', 'welcome', 'localhost/XE');$stid = oci_parse($conn, 'SELECT * FROM locations');
oci_execute($s, OCI_DESCRIBE_ONLY);
for ($i = 1; $i <= oci_num_fields($stid); ++$i) {
echo oci_field_name($stid, $i) . "<br>n";
}?>
Примечания
Замечание:
Транзакции автоматически откатываются при закрытии соединения или
завершении выполнения скрипта. Принудительно вызывайте
oci_commit() для завершения транзакции.Любой вызов oci_execute(), который принудительно
используетOCI_COMMIT_ON_SUCCESS
или по умолчанию
будет завершать любую предыдущую незакрытую транзакцию.Любое выражение Oracle DDL подобное CREATE
или DROP будет автоматически завершать
любу. незакрытую транзакцию.
Замечание:
Так как функция oci_execute() обычно
отправляет выражения в базу данных, то oci_execute()
может найти некоторые незначительные синтаксические ошибки, когда
локальная oci_parse() их не находит.
Смотрите также
- oci_parse() — Подготавливает запрос к выполнению
Вернуться к: OCI8 Функции
From Get docs
Jump to:navigation, search
- « oci_error
- oci_fetch_all »
oci_execute
(PHP 5, PHP 7, PECL OCI8 >= 1.1.0)
oci_execute — Executes a statement
Description
oci_execute
( resource $statement
[, int $mode
= OCI_COMMIT_ON_SUCCESS
] ) : bool
Executes a statement
previously returned
from oci_parse().
After execution, statements like INSERT
will
have data committed to the database by default. For statements
like SELECT
, execution performs the logic of the
query. Query results can subsequently be fetched in PHP with
functions like oci_fetch_array().
Each parsed statement may be executed multiple times, saving the
cost of re-parsing. This is commonly used
for INSERT
statements when data is bound
with oci_bind_by_name().
Parameters
statement
-
A valid OCI statement identifier.
mode
-
An optional second parameter can be one of the following constants:
Execution Modes
Constant Description OCI_COMMIT_ON_SUCCESS
Automatically commit all outstanding changes for this connection when the statement has succeeded. This
is the default.OCI_DESCRIBE_ONLY
Make query meta data available to functions like oci_field_name() but do not
create a result set. Any subsequent fetch call such
as oci_fetch_array() will
fail.OCI_NO_AUTO_COMMIT
Do not automatically commit changes. Prior to PHP 5.3.2 (PECL OCI8 1.4)
useOCI_DEFAULT
which is equivalent
toOCI_NO_AUTO_COMMIT
.Using
OCI_NO_AUTO_COMMIT
mode starts or continues a
transaction. Transactions are automatically rolled back when
the connection is closed, or when the script ends. Explicitly
call oci_commit() to commit a transaction,
or oci_rollback() to abort it.When inserting or updating data, using transactions is
recommended for relational data consistency and for performance
reasons.If
OCI_NO_AUTO_COMMIT
mode is used for any
statement including queries, and
oci_commit()
or oci_rollback() is not subsequently
called, then OCI8 will perform a rollback at the end of the
script even if no data was changed. To avoid an unnecessary
rollback, many scripts do not
useOCI_NO_AUTO_COMMIT
mode for queries or
PL/SQL. Be careful to ensure the appropriate transactional
consistency for the application when
using oci_execute() with different modes in
the same script.
Return Values
Returns TRUE
on success or FALSE
on failure.
Examples
Example #1 oci_execute() for queries
<?php$conn = oci_connect('hr', 'welcome', 'localhost/XE');$stid = oci_parse($conn, 'SELECT * FROM employees');oci_execute($stid);echo "<table border='1'>n";while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) { echo "<tr>n"; foreach ($row as $item) { echo " <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : " ") . "</td>n"; } echo "</tr>n";}echo "</table>n";?>
Example #2 oci_execute() without specifying a mode example
<?php// Before running, create the table:// CREATE TABLE MYTABLE (col1 NUMBER);$conn = oci_connect('hr', 'welcome', 'localhost/XE');$stid = oci_parse($conn, 'INSERT INTO mytab (col1) VALUES (123)');oci_execute($stid); // The row is committed and immediately visible to other users?>
Example #3 oci_execute() with OCI_NO_AUTO_COMMIT
example
<?php// Before running, create the table:// CREATE TABLE MYTABLE (col1 NUMBER);$conn = oci_connect('hr', 'welcome', 'localhost/XE');$stid = oci_parse($conn, 'INSERT INTO mytab (col1) VALUES (:bv)');oci_bind_by_name($stid, ':bv', $i, 10);for ($i = 1; $i <= 5; ++$i) { oci_execute($stid, OCI_NO_AUTO_COMMIT); // use OCI_DEFAULT for PHP <= 5.3.1}oci_commit($conn); // commits all new values: 1, 2, 3, 4, 5?>
Example #4 oci_execute() with different commit modes example
<?php// Before running, create the table:// CREATE TABLE MYTABLE (col1 NUMBER);$conn = oci_connect('hr', 'welcome', 'localhost/XE');$stid = oci_parse($conn, 'INSERT INTO mytab (col1) VALUES (123)');oci_execute($stid, OCI_NO_AUTO_COMMIT); // data not committed$stid = oci_parse($conn, 'INSERT INTO mytab (col1) VALUES (456)');oci_execute($stid); // commits both 123 and 456 values?>
Example #5 oci_execute() with
OCI_DESCRIBE_ONLY
example
<?php$conn = oci_connect('hr', 'welcome', 'localhost/XE');$stid = oci_parse($conn, 'SELECT * FROM locations');oci_execute($s, OCI_DESCRIBE_ONLY);for ($i = 1; $i <= oci_num_fields($stid); ++$i) { echo oci_field_name($stid, $i) . "<br>n";}?>
Notes
Note:
Transactions are automatically rolled back when connections are
closed, or when the script ends, whichever is soonest. Explicitly
call oci_commit() to commit a transaction.Any call to oci_execute() that uses
OCI_COMMIT_ON_SUCCESS
mode explicitly or by
default will commit any previous uncommitted transaction.Any Oracle DDL statement such as
CREATE
orDROP
will automatically commit any
uncommitted transaction.
Note:
Because the oci_execute() function generally
sends the statement to the
database, oci_execute() can identify some
statement syntax errors that the lightweight,
local oci_parse() function does not.
See Also
- oci_parse() — Prepares an Oracle statement for execution
PHP 5, PHP 7, PHP 8, PECL OCI8 >= 1.1.0
oci_execute — Executes a statement
oci_execute(
resource$statement,
[int$mode = OCI_COMMIT_ON_SUCCESS] ): bool
Executes a statement previously returned
from oci_parse.
After execution, statements like INSERT will
have data committed to the database by default. For statements
like SELECT, execution performs the logic of the
query. Query results can subsequently be fetched in PHP with
functions like oci_fetch_array.
Each parsed statement may be executed multiple times, saving the
cost of re-parsing. This is commonly used
for INSERT statements when data is bound
with oci_bind_by_name.
Parameters
- statement
-
A valid OCI statement identifier.
- mode
-
An optional second parameter can be one of the following constants:
Execution Modes
Constant Description OCI_COMMIT_ON_SUCCESS Automatically commit all outstanding changes for
this connection when the statement has succeeded. This
is the default.OCI_DESCRIBE_ONLY Make query meta data available to functions
like oci_field_name but do not
create a result set. Any subsequent fetch call such
as oci_fetch_array will
fail.OCI_NO_AUTO_COMMIT Do not automatically commit changes. Prior to PHP
5.3.2 (PECL OCI8 1.4)
use OCI_DEFAULT which is equivalent
to OCI_NO_AUTO_COMMIT.Using OCI_NO_AUTO_COMMIT mode starts or continues a
transaction. Transactions are automatically rolled back when
the connection is closed, or when the script ends. Explicitly
call oci_commit to commit a transaction,
or oci_rollback to abort it.When inserting or updating data, using transactions is
recommended for relational data consistency and for performance
reasons.If OCI_NO_AUTO_COMMIT mode is used for any
statement including queries, and
oci_commit
or oci_rollback is not subsequently
called, then OCI8 will perform a rollback at the end of the
script even if no data was changed. To avoid an unnecessary
rollback, many scripts do not
use OCI_NO_AUTO_COMMIT mode for queries or
PL/SQL. Be careful to ensure the appropriate transactional
consistency for the application when
using oci_execute with different modes in
the same script.
Return Values
Returns true on success or false on failure.
Notes
Note:
Transactions are automatically rolled back when connections are
closed, or when the script ends, whichever is soonest. Explicitly
call oci_commit to commit a transaction.
Any call to oci_execute that uses
OCI_COMMIT_ON_SUCCESS mode explicitly or by
default will commit any previous uncommitted transaction.
Any Oracle DDL statement such as CREATE
or DROP will automatically commit any
uncommitted transaction.
Note:
Because the oci_execute function generally
sends the statement to the
database, oci_execute can identify some
statement syntax errors that the lightweight,
local oci_parse function does not.
Related Functions
Example of oci_execute
Show all examples
for oci_execute
- oci_bind_array_by_name
- oci_bind_by_name
- oci_cancel
- oci_client_version
- oci_close
- oci_commit
- oci_connect
- oci_define_by_name
- oci_error
- oci_execute
- oci_fetch_all
- oci_fetch_array
- oci_fetch_assoc
- oci_fetch_object
- oci_fetch_row
- oci_fetch
- oci_field_is_null
- oci_field_name
- oci_field_precision
- oci_field_scale
- oci_field_size
- oci_field_type_raw
- oci_field_type
- oci_free_descriptor
- oci_free_statement
- oci_get_implicit_resultset
- oci_internal_debug
- oci_lob_copy
- oci_lob_is_equal
- oci_new_collection
- oci_new_connect
- oci_new_cursor
- oci_new_descriptor
- oci_num_fields
- oci_num_rows
- oci_parse
- oci_password_change
- oci_pconnect
- oci_result
- oci_rollback
- oci_server_version
- oci_set_action
- oci_set_client_identifier
- oci_set_client_info
- oci_set_edition
- oci_set_module_name
- oci_set_prefetch
- oci_statement_type
oci_execute
Executes a statement
Description
bool oci_execute
( resource $statement
[, int $mode
= OCI_COMMIT_ON_SUCCESS
] )
After execution, statements like INSERT will
have data committed to the database by default. For statements
like SELECT, execution performs the logic of the
query. Query results can subsequently be fetched in PHP with
functions like oci_fetch_array.
Each parsed statement may be executed multiple times, saving the
cost of re-parsing. This is commonly used
for INSERT statements when data is bound
with oci_bind_by_name.
Parameters
-
statement
-
A valid OCI statement identifier.
-
mode
-
An optional second parameter can be one of the following constants:
Execution Modes
Constant Description OCI_COMMIT_ON_SUCCESS
Automatically commit all outstanding changes for
this connection when the statement has succeeded. This
is the default.OCI_DESCRIBE_ONLY
Make query meta data available to functions
like oci_field_name but do not
create a result set. Any subsequent fetch call such
as oci_fetch_array will
fail.OCI_NO_AUTO_COMMIT
Do not automatically commit changes. Prior to PHP
5.3.2 (PECL OCI8 1.4)
useOCI_DEFAULT
which is equivalent
toOCI_NO_AUTO_COMMIT
.Using
OCI_NO_AUTO_COMMIT
mode starts or continues a
transaction. Transactions are automatically rolled back when
the connection is closed, or when the script ends. Explicitly
call oci_commit to commit a transaction,
or oci_rollback to abort it.When inserting or updating data, using transactions is
recommended for relational data consistency and for performance
reasons.If
OCI_NO_AUTO_COMMIT
mode is used for any
statement including queries, and
oci_commit
or oci_rollback is not subsequently
called, then OCI8 will perform a rollback at the end of the
script even if no data was changed. To avoid an unnecessary
rollback, many scripts do not
useOCI_NO_AUTO_COMMIT
mode for queries or
PL/SQL. Be careful to ensure the appropriate transactional
consistency for the application when
using oci_execute with different modes in
the same script.
Return Values
Returns TRUE
on success or FALSE
on failure.
Examples
Example #1 oci_execute for queries
<?php
$conn
= oci_connect('hr', 'welcome', 'localhost/XE');$stid = oci_parse($conn, 'SELECT * FROM employees');
oci_execute($stid);
echo
"<table border='1'>n";
while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
echo "<tr>n";
foreach ($row as $item) {
echo " <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : " ") . "</td>n";
}
echo "</tr>n";
}
echo "</table>n";?>
Example #2 oci_execute without specifying a mode example
<?php// Before running, create the table:
// CREATE TABLE MYTABLE (col1 NUMBER);$conn = oci_connect('hr', 'welcome', 'localhost/XE');$stid = oci_parse($conn, 'INSERT INTO mytab (col1) VALUES (123)');oci_execute($stid); // The row is committed and immediately visible to other users?>
Example #3 oci_execute with OCI_NO_AUTO_COMMIT
example
<?php// Before running, create the table:
// CREATE TABLE MYTABLE (col1 NUMBER);$conn = oci_connect('hr', 'welcome', 'localhost/XE');$stid = oci_parse($conn, 'INSERT INTO mytab (col1) VALUES (:bv)');
oci_bind_by_name($stid, ':bv', $i, 10);
for ($i = 1; $i <= 5; ++$i) {
oci_execute($stid, OCI_NO_AUTO_COMMIT); // use OCI_DEFAULT for PHP <= 5.3.1
}
oci_commit($conn); // commits all new values: 1, 2, 3, 4, 5?>
Example #4 oci_execute with different commit modes example
<?php// Before running, create the table:
// CREATE TABLE MYTABLE (col1 NUMBER);$conn = oci_connect('hr', 'welcome', 'localhost/XE');$stid = oci_parse($conn, 'INSERT INTO mytab (col1) VALUES (123)');
oci_execute($stid, OCI_NO_AUTO_COMMIT); // data not committed$stid = oci_parse($conn, 'INSERT INTO mytab (col1) VALUES (456)');
oci_execute($stid); // commits both 123 and 456 values?>
Example #5 oci_execute with
OCI_DESCRIBE_ONLY
example
<?php
$conn
= oci_connect('hr', 'welcome', 'localhost/XE');$stid = oci_parse($conn, 'SELECT * FROM locations');
oci_execute($s, OCI_DESCRIBE_ONLY);
for ($i = 1; $i <= oci_num_fields($stid); ++$i) {
echo oci_field_name($stid, $i) . "<br>n";
}?>
Notes
Note:
Transactions are automatically rolled back when connections are
closed, or when the script ends, whichever is soonest. Explicitly
call oci_commit to commit a transaction.Any call to oci_execute that uses
OCI_COMMIT_ON_SUCCESS
mode explicitly or by
default will commit any previous uncommitted transaction.Any Oracle DDL statement such as CREATE
or DROP will automatically commit any
uncommitted transaction.
Note:
Because the oci_execute function generally
sends the statement to the
database, oci_execute can identify some
statement syntax errors that the lightweight,
local oci_parse function does not.