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 に伝えます。
使用可能な値は次のようになります。
例 1. 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); ?>
|
|
この関数は余分な空白を除去する事を忘れないでください。
次の例を見てください。
例 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); /* このコードは DB に文字列 'trailing spaces follow' に余分な空白を付けないで 挿入します。 */ ?>
|
|
例 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); /* また、このコードは余分な空白を保持したまま 'trailing spaces follow ' を追加します。 */ ?>
|
|
| 警告 |
magic_quotes_gpc や
addslashes() と oci_bind_by_name()
を同時に使用しないでください。
これは、引用符を追加する必要がないためで、
また、magic quote により付加された引用符は、
oci_bind_by_name() が magic quote によ
り付加された引用符と意図的に付加されたものを区別できないため、
そのままデータベースに書き込まれるためです。
|
成功した場合に TRUE を、失敗した場合に FALSE を返します。
注意:
PHP バージョン 5.0.0 以前では、代わりに
ocibindbyname()
を使用しなければなりません。
まだこの名前を使用することができ、下位互換性のため
oci_bind_by_name() への別名として残されていますが、
推奨されません。