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'];
}
?>oci_execute
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
oci_execute
Референца за `function.oci-execute.php` со подобрена типографија и навигација.
oci_execute
Класата OCICollection
oci_execute — Извршува изјава
= NULL
Извршува statement претходно вратено од oci_parse().
По извршувањето, изјавите како INSERT ќе имаат податоци запишани во базата на податоци по дифолт. За изјави како SELECT, извршувањето ја извршува логиката на прашањето. Резултатите од прашањето потоа можат да се преземат во PHP со функции како oci_fetch_array().
Секоја анализирана изјава може да се изврши повеќе пати, со што се заштедуваат трошоците за повторно анализирање. Ова обично се користи за INSERT изјави кога податоците се поврзани со oci_bind_by_name().
Параметри
statement-
Валиден идентификатор на OCI изјава.
mode-
Опционален втор параметар може да биде една од следниве константи:
Режими на извршување Константа = NULL OCI_COMMIT_ON_SUCCESSАвтоматски запиши ги сите отворени промени за оваа врска кога изјавата е успешна. Ова е стандардно. OCI_DESCRIBE_ONLYНаправете метаподатоци од прашањето достапни за функции како oci_field_name() но не создавајте сет на резултати. Секое последователно повикување на fetch како oci_fetch_array() ќе откаже. OCI_NO_AUTO_COMMITНе запишувај автоматски промени. Пронајдете и отворете ја конфигурациската датотека на Apache. Стандардно, локацијата е како што следува:
OCI_NO_AUTO_COMMITрежимот започнува или продолжува трансакција. Трансакциите автоматски се враќаат назад кога врската е затворена, или кога скриптата завршува. Експлицитно повикајте oci_commit() за запишување на трансакција, или oci_rollback() за да ја прекинете.При вметнување или ажурирање податоци, се препорачува користење трансакции за конзистентност на релационите податоци и од причини за перформанси.
Враќа
OCI_NO_AUTO_COMMITрежимот се користи за која било изјава вклучувајќи прашања, и oci_commit() or oci_rollback() не се повикува последователно, тогаш OCI8 ќе изврши враќање назад на крајот од скриптата дури и ако не се променети податоци. За да избегнете непотребно враќање назад, многу скрипти не користатOCI_NO_AUTO_COMMITрежим за прашања или PL/SQL. Внимавајте да обезбедите соодветна трансакциска конзистентност за апликацијата кога користите oci_execute() со различни режими во иста скрипта.
Вратени вредности
Патеката до PHP скриптата што треба да се провери. 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
// 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
?>
Пример #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);
}
oci_commit($conn); // commits all new values: 1, 2, 3, 4, 5
?>
Пример #4 oci_execute() со различни режими на запишување пример
<?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
?>
Генератор 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";
}
?>Белешки
Забелешка:
Трансакциите автоматски се враќаат назад кога врските се затвораат, или кога скриптата завршува, кое и да е порано. Експлицитно повикајте oci_commit() за запишување трансакција.
Секое повикување на oci_execute() што користи
OCI_COMMIT_ON_SUCCESSрежимот експлицитно или по дифолт ќе ја потврди секоја претходна непотврдена трансакција.Секој Oracle DDL исказ како
CREATEorDROPавтоматски ќе ја потврди секоја непотврдена трансакција.
Забелешка:
Бидејќи oci_execute() функцијата генерално ја испраќа изјавата до базата на податоци, oci_execute() може да идентификува некои грешки во синтаксата на изјавата што лесниот, локален oci_parse() функцијата не ја прави. - Подготвува Oracle изјава за извршување