oci_bind_by_name

(PHP 5)

oci_bind_by_name -- 綁定一個 PHP 變量到一個 Oracle 位置標誌符

說明

bool oci_bind_by_name ( resource stmt, string ph_name, mixed &variable [, int maxlength [, int type]] )

oci_bind_by_name() 將 PHP 變量 variable 綁定到 Oracle 的位置標誌符 ph_name。該變量是否會被用作輸入輸出是在運行時決定的,並且函數給該變量配置必要的存儲空間。length 參數確定該綁定的最大長度,若果將 length 設為 -1,oci_bind_by_name() 會用 variable 變量的現用的長度確定綁定的最大長度。

若果要綁定一個抽像資料類型(LOB/ROWID/BFILE),需要先用 oci_new_descriptor() 函數配置空間。length 沒有用於抽像資料類型,應被設為 -1。type 參數告訴 Oracle 要使用什麼樣的描述符。可能的值為:

  • OCI_B_FILE - 對應於 BFILE;

  • OCI_B_CFILE - 對應於 CFILE;

  • OCI_B_CLOB - 對應於 CLOB;

  • OCI_B_BLOB - 對應於 BLOB;

  • OCI_B_ROWID - 對應於 ROWID;

  • OCI_B_NTY - 對應於有名字的資料類型;

  • OCI_B_CURSOR - 對應於游標,是之前由 oci_new_cursor() 建立的。

例子 1. oci_bind_by_name() 例子

<?php
/* oci_bind_by_name example thies at thieso dot net (980221)
  inserts 3 records into emp, and uses the ROWID for updating the
  records just after the insert.
*/

$conn oci_connect("scott""tiger");

$stmt oci_parse($conn"
                          INSERT INTO
                                     emp (empno, ename)
                                              VALUES
                                     (:empno,:ename)
                            RETURNING
                                     ROWID
                                 INTO
                                     :rid
                                         "
);

$data = array(
              
1111 => "Larry",
              
2222 => "Bill",
              
3333 => "Jim"
             
);

$rowid oci_new_descriptor($connOCI_D_ROWID);

oci_bind_by_name($stmt":empno"$empno32);
oci_bind_by_name($stmt":ename"$ename32);
oci_bind_by_name($stmt":rid",   $rowid, -1OCI_B_ROWID);

$update oci_parse($conn"
                            UPDATE
                                  emp
                               SET
                                  sal = :sal
                             WHERE
                                  ROWID = :rid
                             "
);
oci_bind_by_name($update":rid"$rowid, -1OCI_B_ROWID);
oci_bind_by_name($update":sal"$sal,   32);

$sal 10000;

foreach (
$data as $empno => $ename) {
    
oci_execute($stmt);
    
oci_execute($update);
}

$rowid->free();

oci_free_statement($update);
oci_free_statement($stmt);

$stmt oci_parse($conn"
                          SELECT
                                *
                            FROM
                                emp
                           WHERE
                                empno
                              IN
                                (1111,2222,3333)
                              "
);
oci_execute($stmt);

while (
$row oci_fetch_assoc($stmt)) {
    
var_dump($row);
}

oci_free_statement($stmt);

/* delete our "junk" from the emp table.... */
$stmt oci_parse($conn"
                          DELETE FROM
                                     emp
                                WHERE
                                     empno
                                   IN
                                     (1111,2222,3333)
                                   "
);
oci_execute($stmt);
oci_free_statement($stmt);

oci_close($conn);
?>

記住,本函數移除了行尾的空白字元。見以下例子:

例子 2. oci_bind_by_name() 例子

<?php
$connection 
oci_connect('apelsin','kanistra');
$query "INSERT INTO test_table VALUES(:id, :text)";

$statement oci_parse($query);
oci_bind_by_name($statement":id"1);
oci_bind_by_name($statement":text""trailing spaces follow     ");
oci_execute($statement);
/*
 This code will insert into DB string 'trailing spaces follow', without
 trailing spaces
*/
?>

例子 3. oci_bind_by_name() 例子

<?php
$connection 
oci_connect('apelsin','kanistra');
$query "INSERT INTO test_table VALUES(:id, 'trailing spaces follow      ')";

$statement oci_parse($query);
oci_bind_by_name($statement":id"1);
oci_execute($statement);
/*
 And this code will add 'trailing spaces follow      ', preserving
 trailing whitespaces
*/
?>

警示

不要將 magic_quotes_gpcaddslashes()oci_bind_by_name() 同時使用,因為不需要轉義,任何自動加上的引號都會被寫入資料庫中,因為 oci_bind_by_name() 不能分辨有意加上的引號和魔術引號。

若果成功則返回 TRUE,失敗則返回 FALSE

注: 在 PHP 5.0.0 之前的版本必須使用 ocibindbyname() 替代本函數。該函數名仍然可用,為向下相容作為 oci_bind_by_name() 的別名。不過其已被廢棄,不推薦使用。