oci_execute
(PHP 5, PHP 7, PHP 8, PECL OCI8 >= 1.1.0)
oci_execute — 執行一條語句
說明
$stmt, int $mode = ?): bool
   oci_execute() 執行一條之前被解析過的語句(見
   oci_parse())。可選參數 mode
   允許定義執行模式(預設是
   OCI_COMMIT_ON_SUCCESS)。如果不需要將語句自動提交,則需要把
   mode 設為 OCI_DEFAULT。
  
   用 OCI_DEFAULT
   模式時,將建立一個事務。事務會在關閉連線或指令碼結束時(看哪個先)自動回捲。需要明確呼叫
   oci_commit() 來提交事務,或者
   oci_rollback() 中止事務。
  
   成功時返回 true, 或者在失敗時返回 false。
  
注意:
在 PHP 5.0.0 之前的版本必須使用 ociexecute() 替代本函式。該函式名仍然可用,為向下相容作為 oci_execute() 的別名。不過其已被廢棄,不推薦使用。
參數
- 
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_SUCCESSAutomatically commit all outstanding changes for this connection when the statement has succeeded. This is the default. OCI_DEFAULTObsolete as of PHP 5.3.2 (PECL OCI8 1.4) but still available for backward compatibility. Use the equivalent OCI_NO_AUTO_COMMITin new code.OCI_DESCRIBE_ONLYMake 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_COMMITDo not automatically commit changes. Prior to PHP 5.3.2 (PECL OCI8 1.4) use OCI_DEFAULTwhich is an alias forOCI_NO_AUTO_COMMIT.Using OCI_NO_AUTO_COMMITmode starts 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_COMMITmode 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_COMMITmode 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.
返回值
   成功時返回 true, 或者在失敗時返回 false。
  
範例
示例 #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";
?>
示例 #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
?>
示例 #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
?>
示例 #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
?>
示例 #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";
}
?>
註釋
注意:
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_SUCCESSmode explicitly or by default will commit any previous uncommitted transaction.Any Oracle DDL statement such as
CREATEorDROPwill 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.
注意:
In PHP versions before 5.0.0 use ociexecute() instead.