OCIBindByName

OCIBindByName -- Oracle プレースホルダーに PHP 変数をバインドする

説明

int OCIBindByName(int stmt, string ph_name, mixed &variable, intlength, int [type]);

OCIBindByName() は、PHP 変数 variable を Oracle プレースホルダー ph_name にバインドします。 実行時に入力用、出力用に使用されるによらず、必要な記憶領域が確保されます。 length パラメータは、バインド時の最大長を設定します。 length を -1 に設定した場合、 OCIBindByName()variable の現在の長さを 最大長として設定します。

抽象データ型 (LOB/ROWID/BFILE) をバインドする必要がある場合、 まず OCINewDescriptor() 関数を使用してこれを確保する 必要があります。 length は抽象データ型用には使用されず、-1 を設定する必要があります。 type 変数は使用したいディスクリプタの種類を Oracle に伝えます。 使用可能な値は次のようになります。: OCI_B_FILE (Binary-File), OCI_B_CFILE (Character-File), OCI_B_CLOB (Character-LOB), OCI_B_BLOB (Binary-LOB) ,OCI_B_ROWID (ROWID)

例 1. OCIDefineByName

  1 
  2 <?php
  3 /* OCIBindByPos の例 thies@digicol.de (980221)
  4 
  5   3 レコードを emp に挿入し、挿入の直後にレコードを更新するために ROWID を使用します。
  6 */
  7 
  8 $conn = OCILogon("scott","tiger");
  9 
 10 $stmt = OCIParse($conn,"insert into emp (empno, ename) ".
 11 					   "values (:empno,:ename) ".
 12 					   "returning ROWID into :rid");
 13 
 14 $data = array(1111 => "Larry", 2222 => "Bill", 3333 => "Jim");
 15 
 16 $rowid = OCINewDescriptor($conn,OCI_D_ROWID);
 17 
 18 OCIBindByName($stmt,":empno",&$empno,32);
 19 OCIBindByName($stmt,":ename",&$ename,32);
 20 OCIBindByName($stmt,":rid",&$rowid,-1,OCI_B_ROWID);
 21 
 22 $update = OCIParse($conn,"update emp set sal = :sal where ROWID = :rid");
 23 OCIBindByName($update,":rid",&$rowid,-1,OCI_B_ROWID);
 24 OCIBindByName($update,":sal",&$sal,32);
 25 
 26 $sal = 10000;
 27 
 28 while (list($empno,$ename) = each($data)) {
 29 	OCIExecute($stmt);
 30 	OCIExecute($update);
 31 } 
 32 
 33 $rowid->free();
 34 
 35 OCIFreeStatement($update);
 36 OCIFreeStatement($stmt);
 37 
 38 $stmt = OCIParse($conn,"select * from emp where empno in (1111,2222,3333)");
 39 OCIExecute($stmt);
 40 while (OCIFetchInto($stmt,&$arr,OCI_ASSOC)) {
 41 	var_dump($arr);
 42 }
 43 OCIFreeStatement($stmt);
 44 
 45 /* テーブル emp から "junk" を削除する.... */
 46 $stmt = OCIParse($conn,"delete from emp where empno in (1111,2222,3333)");
 47 OCIExecute($stmt);
 48 OCIFreeStatement($stmt);
 49 
 50 OCILogoff($conn);
 51 ?>