Oci execute error

(PHP 5, PHP 7, PHP 8, PECL OCI8 >= 1.1.0)

(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.

Содержание

  1. oci_error
  2. Описание
  3. Список параметров
  4. Возвращаемые значения
  5. Список изменений
  6. Примеры
  7. oci_execute — Выполняет подготовленное выражение
  8. Описание
  9. Список параметров
  10. Возвращаемые значения
  11. Примеры
  12. Примечания
  13. Смотрите также
  14. oci_error — Возвращает последнюю ошибку
  15. Описание
  16. Список параметров
  17. Возвращаемые значения
  18. Примеры
  19. oci_execute
  20. Description
  21. Parameters
  22. Return Values
  23. Examples
  24. Notes
  25. See Also
  26. 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($stidOCI_ASSOC+OCI_RETURN_NULLS)) {
    echo 
"<tr>n";
    foreach (
$row as $item) {
        echo 
"    <td>" . ($item !== null htmlentities($itemENT_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'$i10);
for (
$i 1$i <= 5; ++$i) {
    
oci_execute($stidOCI_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($stidOCI_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($sOCI_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_executeExecutes 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)
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

<?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) : "&nbsp;") . "</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.

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)
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


<?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($stidOCI_ASSOC+OCI_RETURN_NULLS)) {
    echo 
"<tr>n";
    foreach (
$row as $item) {
        echo 
"    <td>" . ($item !== null htmlentities($itemENT_QUOTES) : "&nbsp;") . "</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'$i10);
for (
$i 1$i <= 5; ++$i) {
    
oci_execute($stidOCI_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($stidOCI_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($sOCI_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.

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Oci error php
  • Oci 22053 overflow error
  • Ochiru hitozuma syntax error
  • Ocf ошибка частотника schneider
  • Ocenaudio как изменить голос

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии