oci_bind_by_nameとは? わかりやすく解説

oci_bind_by_name

(PHP 5)
oci_bind_by_name — Oracle プレースホルダーに PHP 変数をバインドする

説明

bool oci_bind_by_name ( resource stmt, string ph_name, mixed &variable [, int maxlength [, int type]] )
ocibindbyname() は、PHP 変数 variable を Oracle プレースホルダー ph_name にバインドします。実行時に入力用、 出力用に使用されるによらず、必要な記憶領域が確保されます。 length パラメータは、バインド時の最大長を 設定します。length を -1 に設定した場合、 oci_bind_by_name()variable の現在の長さを最大長として設定し ます。
抽象データ型 (LOB/ROWID/BFILE) をバインドする必要がある場合、まず OCINewDescriptor() 関数を使用してこれを確保する必要があります。 length は抽象データ型用には 使用されず、-1 を設定する必要があります。 type パラメータは、 使用されるディスクリプタをOracle に伝えます。 使用可能な値は次のようになります。
  • SQLT_FILE - BFILE 用;
  • SQLT_CFILE - CFILE 用
  • SQLT_CLOB - CLOB 用
  • SQLT_BLOB - BLOB 用
  • SQLT_RDD - ROWID 用
  • SQLT_NTY - 名前付けされたデータ型用
  • SQLT_INT - integer 用
  • SQLT_CHR - VARCHAR 用
  • SQLT_BIN - RAW カラム用
  • SQLT_LNG - LONG カラム用
  • SQLT_LBI - LONG RAW カラム用
  • SQLT_RSET - カーソル用。これは oci_new_cursor() を使って前もって生成されたもの。

例 1524. oci_bind_by_name() の例
<?php
/* oci_bind_by_name  の例 thies at thieso dot net (980221)
  3レコードをempに挿入し、挿入の直後にレコードを更新するために
  ROWIDを使用します。
*/

$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($conn, OCI_D_ROWID);

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

$update = oci_parse($conn, "
                           UPDATE
                                 emp
                               SET
                                 sal = :sal
                             WHERE
                                 ROWID = :rid
                             ");
oci_bind_by_name($update, ":rid", $rowid, -1, OCI_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);

/* テーブル emp から "junk" を削除する.... */
$stmt = oci_parse($conn, "
                         DELETE FROM
                                     emp
                               WHERE
                                     empno
                                   IN
                                     (1111,2222,3333)
                                   ");
oci_execute($stmt);
oci_free_statement($stmt);

oci_close($conn);
?>


この関数は余分な空白を除去する事を忘れないでください。 次の例を見てください。
例 1525. 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);
   /*
     このコードは DB に文字列 'trailing spaces follow' に余分な空白を付けないで
     挿入します。
   */
?>


例 1526. 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);
   /*
     また、このコードは余分な空白を保持したまま 'trailing spaces follow      '
     を追加します。
   */
?>



警告
magic_quotes_gpcaddslashes()oci_bind_by_name() を同時に使用しないでください。 これは、引用符を追加する必要がないためで、 また、magic quote により付加された引用符は、 oci_bind_by_name() が magic quote によ り付加された引用符と意図的に付加されたものを区別できないため、 そのままデータベースに書き込まれるためです。

成功した場合に TRUE を、失敗した場合に FALSE を返します。
注意: PHP バージョン 5.0.0 以前では、代わりに ocibindbyname() を使用しなければなりません。 まだこの名前を使用することができ、下位互換性のため oci_bind_by_name() への別名として残されていますが、 推奨されません。

ocibindbyname

(PHP 4)
ocibindbyname — oci_bind_by_name() のエイリアス

説明

この関数は次の関数のエイリアスです。 oci_bind_by_name().




固有名詞の分類


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「oci_bind_by_name」の関連用語

oci_bind_by_nameのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



oci_bind_by_nameのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
PHP Documentation GroupPHP Documentation Group
Copyright © 1997 - 2024 by the PHP Documentation Group.

©2024 GRAS Group, Inc.RSS